{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 逻辑回归评分卡模型"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##  导入库"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "from sklearn.linear_model import LogisticRegression as LR"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 数据探索以及数据预处理"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "data = pd.read_csv(r\"rankingcard.csv\",index_col=0)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 探索数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>SeriousDlqin2yrs</th>\n",
       "      <th>RevolvingUtilizationOfUnsecuredLines</th>\n",
       "      <th>age</th>\n",
       "      <th>NumberOfTime30-59DaysPastDueNotWorse</th>\n",
       "      <th>DebtRatio</th>\n",
       "      <th>MonthlyIncome</th>\n",
       "      <th>NumberOfOpenCreditLinesAndLoans</th>\n",
       "      <th>NumberOfTimes90DaysLate</th>\n",
       "      <th>NumberRealEstateLoansOrLines</th>\n",
       "      <th>NumberOfTime60-89DaysPastDueNotWorse</th>\n",
       "      <th>NumberOfDependents</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>0.766127</td>\n",
       "      <td>45</td>\n",
       "      <td>2</td>\n",
       "      <td>0.802982</td>\n",
       "      <td>9120.0</td>\n",
       "      <td>13</td>\n",
       "      <td>0</td>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0</td>\n",
       "      <td>0.957151</td>\n",
       "      <td>40</td>\n",
       "      <td>0</td>\n",
       "      <td>0.121876</td>\n",
       "      <td>2600.0</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0</td>\n",
       "      <td>0.658180</td>\n",
       "      <td>38</td>\n",
       "      <td>1</td>\n",
       "      <td>0.085113</td>\n",
       "      <td>3042.0</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>0.233810</td>\n",
       "      <td>30</td>\n",
       "      <td>0</td>\n",
       "      <td>0.036050</td>\n",
       "      <td>3300.0</td>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>0</td>\n",
       "      <td>0.907239</td>\n",
       "      <td>49</td>\n",
       "      <td>1</td>\n",
       "      <td>0.024926</td>\n",
       "      <td>63588.0</td>\n",
       "      <td>7</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   SeriousDlqin2yrs  RevolvingUtilizationOfUnsecuredLines  age  \\\n",
       "1                 1                              0.766127   45   \n",
       "2                 0                              0.957151   40   \n",
       "3                 0                              0.658180   38   \n",
       "4                 0                              0.233810   30   \n",
       "5                 0                              0.907239   49   \n",
       "\n",
       "   NumberOfTime30-59DaysPastDueNotWorse  DebtRatio  MonthlyIncome  \\\n",
       "1                                     2   0.802982         9120.0   \n",
       "2                                     0   0.121876         2600.0   \n",
       "3                                     1   0.085113         3042.0   \n",
       "4                                     0   0.036050         3300.0   \n",
       "5                                     1   0.024926        63588.0   \n",
       "\n",
       "   NumberOfOpenCreditLinesAndLoans  NumberOfTimes90DaysLate  \\\n",
       "1                               13                        0   \n",
       "2                                4                        0   \n",
       "3                                2                        1   \n",
       "4                                5                        0   \n",
       "5                                7                        0   \n",
       "\n",
       "   NumberRealEstateLoansOrLines  NumberOfTime60-89DaysPastDueNotWorse  \\\n",
       "1                             6                                     0   \n",
       "2                             0                                     0   \n",
       "3                             0                                     0   \n",
       "4                             0                                     0   \n",
       "5                             1                                     0   \n",
       "\n",
       "   NumberOfDependents  \n",
       "1                 2.0  \n",
       "2                 1.0  \n",
       "3                 0.0  \n",
       "4                 0.0  \n",
       "5                 0.0  "
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#观察数据类型\n",
    "data.head()#注意可以看到第一列为标签，剩下的10列为特征"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(150000, 11)"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#观察数据结构\n",
    "data.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Int64Index: 150000 entries, 1 to 150000\n",
      "Data columns (total 11 columns):\n",
      " #   Column                                Non-Null Count   Dtype  \n",
      "---  ------                                --------------   -----  \n",
      " 0   SeriousDlqin2yrs                      150000 non-null  int64  \n",
      " 1   RevolvingUtilizationOfUnsecuredLines  150000 non-null  float64\n",
      " 2   age                                   150000 non-null  int64  \n",
      " 3   NumberOfTime30-59DaysPastDueNotWorse  150000 non-null  int64  \n",
      " 4   DebtRatio                             150000 non-null  float64\n",
      " 5   MonthlyIncome                         120269 non-null  float64\n",
      " 6   NumberOfOpenCreditLinesAndLoans       150000 non-null  int64  \n",
      " 7   NumberOfTimes90DaysLate               150000 non-null  int64  \n",
      " 8   NumberRealEstateLoansOrLines          150000 non-null  int64  \n",
      " 9   NumberOfTime60-89DaysPastDueNotWorse  150000 non-null  int64  \n",
      " 10  NumberOfDependents                    146076 non-null  float64\n",
      "dtypes: float64(4), int64(7)\n",
      "memory usage: 13.7 MB\n"
     ]
    }
   ],
   "source": [
    "#观察数据字段\n",
    "data.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 去除重复值 "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Int64Index: 149391 entries, 1 to 150000\n",
      "Data columns (total 11 columns):\n",
      " #   Column                                Non-Null Count   Dtype  \n",
      "---  ------                                --------------   -----  \n",
      " 0   SeriousDlqin2yrs                      149391 non-null  int64  \n",
      " 1   RevolvingUtilizationOfUnsecuredLines  149391 non-null  float64\n",
      " 2   age                                   149391 non-null  int64  \n",
      " 3   NumberOfTime30-59DaysPastDueNotWorse  149391 non-null  int64  \n",
      " 4   DebtRatio                             149391 non-null  float64\n",
      " 5   MonthlyIncome                         120170 non-null  float64\n",
      " 6   NumberOfOpenCreditLinesAndLoans       149391 non-null  int64  \n",
      " 7   NumberOfTimes90DaysLate               149391 non-null  int64  \n",
      " 8   NumberRealEstateLoansOrLines          149391 non-null  int64  \n",
      " 9   NumberOfTime60-89DaysPastDueNotWorse  149391 non-null  int64  \n",
      " 10  NumberOfDependents                    145563 non-null  float64\n",
      "dtypes: float64(4), int64(7)\n",
      "memory usage: 13.7 MB\n"
     ]
    }
   ],
   "source": [
    "#去除重复值，inplace=True表示替换原数据\n",
    "data.drop_duplicates(inplace=True)\n",
    "data.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 149391 entries, 0 to 149390\n",
      "Data columns (total 11 columns):\n",
      " #   Column                                Non-Null Count   Dtype  \n",
      "---  ------                                --------------   -----  \n",
      " 0   SeriousDlqin2yrs                      149391 non-null  int64  \n",
      " 1   RevolvingUtilizationOfUnsecuredLines  149391 non-null  float64\n",
      " 2   age                                   149391 non-null  int64  \n",
      " 3   NumberOfTime30-59DaysPastDueNotWorse  149391 non-null  int64  \n",
      " 4   DebtRatio                             149391 non-null  float64\n",
      " 5   MonthlyIncome                         120170 non-null  float64\n",
      " 6   NumberOfOpenCreditLinesAndLoans       149391 non-null  int64  \n",
      " 7   NumberOfTimes90DaysLate               149391 non-null  int64  \n",
      " 8   NumberRealEstateLoansOrLines          149391 non-null  int64  \n",
      " 9   NumberOfTime60-89DaysPastDueNotWorse  149391 non-null  int64  \n",
      " 10  NumberOfDependents                    145563 non-null  float64\n",
      "dtypes: float64(4), int64(7)\n",
      "memory usage: 12.5 MB\n"
     ]
    }
   ],
   "source": [
    "#删除之后千恢复索引\n",
    "data.index = range(data.shape[0])\n",
    "data.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 填补缺失值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 149391 entries, 0 to 149390\n",
      "Data columns (total 11 columns):\n",
      " #   Column                                Non-Null Count   Dtype  \n",
      "---  ------                                --------------   -----  \n",
      " 0   SeriousDlqin2yrs                      149391 non-null  int64  \n",
      " 1   RevolvingUtilizationOfUnsecuredLines  149391 non-null  float64\n",
      " 2   age                                   149391 non-null  int64  \n",
      " 3   NumberOfTime30-59DaysPastDueNotWorse  149391 non-null  int64  \n",
      " 4   DebtRatio                             149391 non-null  float64\n",
      " 5   MonthlyIncome                         120170 non-null  float64\n",
      " 6   NumberOfOpenCreditLinesAndLoans       149391 non-null  int64  \n",
      " 7   NumberOfTimes90DaysLate               149391 non-null  int64  \n",
      " 8   NumberRealEstateLoansOrLines          149391 non-null  int64  \n",
      " 9   NumberOfTime60-89DaysPastDueNotWorse  149391 non-null  int64  \n",
      " 10  NumberOfDependents                    145563 non-null  float64\n",
      "dtypes: float64(4), int64(7)\n",
      "memory usage: 12.5 MB\n"
     ]
    }
   ],
   "source": [
    "#探索缺失值\n",
    "data.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "SeriousDlqin2yrs                            0\n",
       "RevolvingUtilizationOfUnsecuredLines        0\n",
       "age                                         0\n",
       "NumberOfTime30-59DaysPastDueNotWorse        0\n",
       "DebtRatio                                   0\n",
       "MonthlyIncome                           29221\n",
       "NumberOfOpenCreditLinesAndLoans             0\n",
       "NumberOfTimes90DaysLate                     0\n",
       "NumberRealEstateLoansOrLines                0\n",
       "NumberOfTime60-89DaysPastDueNotWorse        0\n",
       "NumberOfDependents                       3828\n",
       "dtype: int64"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#返回空值的个数\n",
    "data.isnull().sum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "SeriousDlqin2yrs                            0\n",
       "RevolvingUtilizationOfUnsecuredLines        0\n",
       "age                                         0\n",
       "NumberOfTime30-59DaysPastDueNotWorse        0\n",
       "DebtRatio                                   0\n",
       "MonthlyIncome                           29221\n",
       "NumberOfOpenCreditLinesAndLoans             0\n",
       "NumberOfTimes90DaysLate                     0\n",
       "NumberRealEstateLoansOrLines                0\n",
       "NumberOfTime60-89DaysPastDueNotWorse        0\n",
       "NumberOfDependents                       3828\n",
       "dtype: int64"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.isnull().sum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "SeriousDlqin2yrs                        0.000000\n",
       "RevolvingUtilizationOfUnsecuredLines    0.000000\n",
       "age                                     0.000000\n",
       "NumberOfTime30-59DaysPastDueNotWorse    0.000000\n",
       "DebtRatio                               0.000000\n",
       "MonthlyIncome                           0.195601\n",
       "NumberOfOpenCreditLinesAndLoans         0.000000\n",
       "NumberOfTimes90DaysLate                 0.000000\n",
       "NumberRealEstateLoansOrLines            0.000000\n",
       "NumberOfTime60-89DaysPastDueNotWorse    0.000000\n",
       "NumberOfDependents                      0.025624\n",
       "dtype: float64"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#返回空值的比例\n",
    "data.isnull().mean()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 用均值填补家庭人数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 149391 entries, 0 to 149390\n",
      "Data columns (total 11 columns):\n",
      " #   Column                                Non-Null Count   Dtype  \n",
      "---  ------                                --------------   -----  \n",
      " 0   SeriousDlqin2yrs                      149391 non-null  int64  \n",
      " 1   RevolvingUtilizationOfUnsecuredLines  149391 non-null  float64\n",
      " 2   age                                   149391 non-null  int64  \n",
      " 3   NumberOfTime30-59DaysPastDueNotWorse  149391 non-null  int64  \n",
      " 4   DebtRatio                             149391 non-null  float64\n",
      " 5   MonthlyIncome                         120170 non-null  float64\n",
      " 6   NumberOfOpenCreditLinesAndLoans       149391 non-null  int64  \n",
      " 7   NumberOfTimes90DaysLate               149391 non-null  int64  \n",
      " 8   NumberRealEstateLoansOrLines          149391 non-null  int64  \n",
      " 9   NumberOfTime60-89DaysPastDueNotWorse  149391 non-null  int64  \n",
      " 10  NumberOfDependents                    149391 non-null  float64\n",
      "dtypes: float64(4), int64(7)\n",
      "memory usage: 12.5 MB\n"
     ]
    }
   ],
   "source": [
    "#这里用均值填补家庭人数这一项 \n",
    "data[\"NumberOfDependents\"].fillna(int(data[\"NumberOfDependents\"].mean()),inplace=True)\n",
    "data.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 用随机森林填补月收入"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "def fill_missing_rf(X,y,to_fill):\n",
    "\n",
    "    \"\"\"\n",
    "    使用随机森林填补一个特征的缺失值的函数\n",
    "\n",
    "    参数：\n",
    "    X：要填补的特征矩阵\n",
    "    y：完整的，没有缺失值的标签\n",
    "    to_fill：字符串，要填补的那一列的名称\n",
    "    \"\"\"\n",
    "\n",
    "    #构建我们的新特征矩阵和新标签\n",
    "    df = X.copy() \n",
    "    fill = df.loc[:,to_fill] \n",
    "    df = pd.concat([df.loc[:,df.columns != to_fill],pd.DataFrame(y)],axis=1)\n",
    "\n",
    "    # 找出我们的训练集和测试集\n",
    "    Ytrain = fill[fill.notnull()]\n",
    "    Ytest = fill[fill.isnull()]\n",
    "    Xtrain = df.iloc[Ytrain.index,:]\n",
    "    Xtest = df.iloc[Ytest.index,:]\n",
    "\n",
    "    #用随机森林回归来填补缺失值\n",
    "    from sklearn.ensemble import RandomForestRegressor as rfr\n",
    "    rfr = rfr(n_estimators=100).fit(Xtrain, Ytrain)\n",
    "    Ypredict = rfr.predict(Xtest)\n",
    "\n",
    "    return Ypredict"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(149391, 10)"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X = data.iloc[:,1:]\n",
    "y = data[\"SeriousDlqin2yrs\"]\n",
    "X.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "#求得需要填补的缺失值\n",
    "y_pred = fill_missing_rf(X,y,\"MonthlyIncome\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(29221,)"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#确认得到y_pred个数\n",
    "y_pred.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "29221"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#确认实际缺失值的个数\n",
    "data.loc[:,\"MonthlyIncome\"].isnull().sum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "6        NaN\n",
       "8        NaN\n",
       "16       NaN\n",
       "32       NaN\n",
       "41       NaN\n",
       "          ..\n",
       "149368   NaN\n",
       "149369   NaN\n",
       "149376   NaN\n",
       "149384   NaN\n",
       "149388   NaN\n",
       "Name: MonthlyIncome, Length: 29221, dtype: float64"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.loc[data.loc[:,\"MonthlyIncome\"].isnull(),\"MonthlyIncome\"]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 149391 entries, 0 to 149390\n",
      "Data columns (total 11 columns):\n",
      " #   Column                                Non-Null Count   Dtype  \n",
      "---  ------                                --------------   -----  \n",
      " 0   SeriousDlqin2yrs                      149391 non-null  int64  \n",
      " 1   RevolvingUtilizationOfUnsecuredLines  149391 non-null  float64\n",
      " 2   age                                   149391 non-null  int64  \n",
      " 3   NumberOfTime30-59DaysPastDueNotWorse  149391 non-null  int64  \n",
      " 4   DebtRatio                             149391 non-null  float64\n",
      " 5   MonthlyIncome                         149391 non-null  float64\n",
      " 6   NumberOfOpenCreditLinesAndLoans       149391 non-null  int64  \n",
      " 7   NumberOfTimes90DaysLate               149391 non-null  int64  \n",
      " 8   NumberRealEstateLoansOrLines          149391 non-null  int64  \n",
      " 9   NumberOfTime60-89DaysPastDueNotWorse  149391 non-null  int64  \n",
      " 10  NumberOfDependents                    149391 non-null  float64\n",
      "dtypes: float64(4), int64(7)\n",
      "memory usage: 12.5 MB\n"
     ]
    }
   ],
   "source": [
    "#确认个数没有问题，我们就可以将数据覆盖了\n",
    "data.loc[data.loc[:,\"MonthlyIncome\"].isnull(),\"MonthlyIncome\"] = y_pred\n",
    "\n",
    "data.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 描述性统计处理异常值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>count</th>\n",
       "      <th>mean</th>\n",
       "      <th>std</th>\n",
       "      <th>min</th>\n",
       "      <th>1%</th>\n",
       "      <th>10%</th>\n",
       "      <th>25%</th>\n",
       "      <th>50%</th>\n",
       "      <th>75%</th>\n",
       "      <th>90%</th>\n",
       "      <th>99%</th>\n",
       "      <th>max</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>SeriousDlqin2yrs</th>\n",
       "      <td>149391.0</td>\n",
       "      <td>0.066999</td>\n",
       "      <td>0.250021</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>RevolvingUtilizationOfUnsecuredLines</th>\n",
       "      <td>149391.0</td>\n",
       "      <td>6.071087</td>\n",
       "      <td>250.263672</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.003199</td>\n",
       "      <td>0.030132</td>\n",
       "      <td>0.154235</td>\n",
       "      <td>0.556494</td>\n",
       "      <td>0.978007</td>\n",
       "      <td>1.093922</td>\n",
       "      <td>50708.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>age</th>\n",
       "      <td>149391.0</td>\n",
       "      <td>52.306237</td>\n",
       "      <td>14.725962</td>\n",
       "      <td>0.0</td>\n",
       "      <td>24.0</td>\n",
       "      <td>33.000000</td>\n",
       "      <td>41.000000</td>\n",
       "      <td>52.000000</td>\n",
       "      <td>63.000000</td>\n",
       "      <td>72.000000</td>\n",
       "      <td>87.000000</td>\n",
       "      <td>109.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>NumberOfTime30-59DaysPastDueNotWorse</th>\n",
       "      <td>149391.0</td>\n",
       "      <td>0.393886</td>\n",
       "      <td>3.852953</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>4.000000</td>\n",
       "      <td>98.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>DebtRatio</th>\n",
       "      <td>149391.0</td>\n",
       "      <td>354.436740</td>\n",
       "      <td>2041.843455</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.034991</td>\n",
       "      <td>0.177441</td>\n",
       "      <td>0.368234</td>\n",
       "      <td>0.875279</td>\n",
       "      <td>1275.000000</td>\n",
       "      <td>4985.100000</td>\n",
       "      <td>329664.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>MonthlyIncome</th>\n",
       "      <td>149391.0</td>\n",
       "      <td>5424.780964</td>\n",
       "      <td>13237.176066</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.180000</td>\n",
       "      <td>1800.000000</td>\n",
       "      <td>4420.000000</td>\n",
       "      <td>7416.000000</td>\n",
       "      <td>10800.000000</td>\n",
       "      <td>23205.000000</td>\n",
       "      <td>3008750.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>NumberOfOpenCreditLinesAndLoans</th>\n",
       "      <td>149391.0</td>\n",
       "      <td>8.480892</td>\n",
       "      <td>5.136515</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>5.000000</td>\n",
       "      <td>8.000000</td>\n",
       "      <td>11.000000</td>\n",
       "      <td>15.000000</td>\n",
       "      <td>24.000000</td>\n",
       "      <td>58.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>NumberOfTimes90DaysLate</th>\n",
       "      <td>149391.0</td>\n",
       "      <td>0.238120</td>\n",
       "      <td>3.826165</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>98.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>NumberRealEstateLoansOrLines</th>\n",
       "      <td>149391.0</td>\n",
       "      <td>1.022391</td>\n",
       "      <td>1.130196</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>4.000000</td>\n",
       "      <td>54.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>NumberOfTime60-89DaysPastDueNotWorse</th>\n",
       "      <td>149391.0</td>\n",
       "      <td>0.212503</td>\n",
       "      <td>3.810523</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>98.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>NumberOfDependents</th>\n",
       "      <td>149391.0</td>\n",
       "      <td>0.740393</td>\n",
       "      <td>1.108272</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>4.000000</td>\n",
       "      <td>20.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                         count         mean           std  \\\n",
       "SeriousDlqin2yrs                      149391.0     0.066999      0.250021   \n",
       "RevolvingUtilizationOfUnsecuredLines  149391.0     6.071087    250.263672   \n",
       "age                                   149391.0    52.306237     14.725962   \n",
       "NumberOfTime30-59DaysPastDueNotWorse  149391.0     0.393886      3.852953   \n",
       "DebtRatio                             149391.0   354.436740   2041.843455   \n",
       "MonthlyIncome                         149391.0  5424.780964  13237.176066   \n",
       "NumberOfOpenCreditLinesAndLoans       149391.0     8.480892      5.136515   \n",
       "NumberOfTimes90DaysLate               149391.0     0.238120      3.826165   \n",
       "NumberRealEstateLoansOrLines          149391.0     1.022391      1.130196   \n",
       "NumberOfTime60-89DaysPastDueNotWorse  149391.0     0.212503      3.810523   \n",
       "NumberOfDependents                    149391.0     0.740393      1.108272   \n",
       "\n",
       "                                      min    1%        10%          25%  \\\n",
       "SeriousDlqin2yrs                      0.0   0.0   0.000000     0.000000   \n",
       "RevolvingUtilizationOfUnsecuredLines  0.0   0.0   0.003199     0.030132   \n",
       "age                                   0.0  24.0  33.000000    41.000000   \n",
       "NumberOfTime30-59DaysPastDueNotWorse  0.0   0.0   0.000000     0.000000   \n",
       "DebtRatio                             0.0   0.0   0.034991     0.177441   \n",
       "MonthlyIncome                         0.0   0.0   0.180000  1800.000000   \n",
       "NumberOfOpenCreditLinesAndLoans       0.0   0.0   3.000000     5.000000   \n",
       "NumberOfTimes90DaysLate               0.0   0.0   0.000000     0.000000   \n",
       "NumberRealEstateLoansOrLines          0.0   0.0   0.000000     0.000000   \n",
       "NumberOfTime60-89DaysPastDueNotWorse  0.0   0.0   0.000000     0.000000   \n",
       "NumberOfDependents                    0.0   0.0   0.000000     0.000000   \n",
       "\n",
       "                                              50%          75%           90%  \\\n",
       "SeriousDlqin2yrs                         0.000000     0.000000      0.000000   \n",
       "RevolvingUtilizationOfUnsecuredLines     0.154235     0.556494      0.978007   \n",
       "age                                     52.000000    63.000000     72.000000   \n",
       "NumberOfTime30-59DaysPastDueNotWorse     0.000000     0.000000      1.000000   \n",
       "DebtRatio                                0.368234     0.875279   1275.000000   \n",
       "MonthlyIncome                         4420.000000  7416.000000  10800.000000   \n",
       "NumberOfOpenCreditLinesAndLoans          8.000000    11.000000     15.000000   \n",
       "NumberOfTimes90DaysLate                  0.000000     0.000000      0.000000   \n",
       "NumberRealEstateLoansOrLines             1.000000     2.000000      2.000000   \n",
       "NumberOfTime60-89DaysPastDueNotWorse     0.000000     0.000000      0.000000   \n",
       "NumberOfDependents                       0.000000     1.000000      2.000000   \n",
       "\n",
       "                                               99%        max  \n",
       "SeriousDlqin2yrs                          1.000000        1.0  \n",
       "RevolvingUtilizationOfUnsecuredLines      1.093922    50708.0  \n",
       "age                                      87.000000      109.0  \n",
       "NumberOfTime30-59DaysPastDueNotWorse      4.000000       98.0  \n",
       "DebtRatio                              4985.100000   329664.0  \n",
       "MonthlyIncome                         23205.000000  3008750.0  \n",
       "NumberOfOpenCreditLinesAndLoans          24.000000       58.0  \n",
       "NumberOfTimes90DaysLate                   3.000000       98.0  \n",
       "NumberRealEstateLoansOrLines              4.000000       54.0  \n",
       "NumberOfTime60-89DaysPastDueNotWorse      2.000000       98.0  \n",
       "NumberOfDependents                        4.000000       20.0  "
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#描述性统计\n",
    "data.describe([0.01,0.1,0.25,.5,.75,.9,.99]).T"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 异常值：年龄为0的用户"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#异常值也被我们观察到，年龄的最小值居然有0，这不符合银行的业务需求，即便是儿童账户也要至少8岁，我们可以\n",
    "# 查看一下年龄为0的人有多少\n",
    "(data[\"age\"] == 0).sum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [],
   "source": [
    "#发现只有一个人年龄为0，可以判断这肯定是录入失误造成的，可以当成是缺失值来处理，直接删除掉这个样本\n",
    "data = data[data[\"age\"] != 0]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 其他异常值\n",
    "另外，有三个指标看起来很奇怪：\n",
    " \n",
    "\"NumberOfTime30-59DaysPastDueNotWorse\"\n",
    "\n",
    "\"NumberOfTime60-89DaysPastDueNotWorse\"\n",
    "\n",
    "\n",
    "\"NumberOfTimes90DaysLate\"\n",
    " \n",
    "这三个指标分别是“过去两年内出现35-59天逾期但是没有发展的更坏的次数”，“过去两年内出现60-89天逾期但是没\n",
    "有发展的更坏的次数”,“过去两年内出现90天逾期的次数”。这三个指标，在99%的分布的时候依然是2，最大值却是\n",
    "98，看起来非常奇怪。一个人在过去两年内逾期35~59天98次，一年6个60天，两年内逾期98次这是怎么算出来的？\n",
    " \n",
    "我们可以去咨询业务人员，请教他们这个逾期次数是如何计算的。如果这个指标是正常的，那这些两年内逾期了98次的\n",
    "客户，应该都是坏客户。在我们无法询问他们情况下，我们查看一下有多少个样本存在这种异常："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>SeriousDlqin2yrs</th>\n",
       "      <th>RevolvingUtilizationOfUnsecuredLines</th>\n",
       "      <th>age</th>\n",
       "      <th>NumberOfTime30-59DaysPastDueNotWorse</th>\n",
       "      <th>DebtRatio</th>\n",
       "      <th>MonthlyIncome</th>\n",
       "      <th>NumberOfOpenCreditLinesAndLoans</th>\n",
       "      <th>NumberOfTimes90DaysLate</th>\n",
       "      <th>NumberRealEstateLoansOrLines</th>\n",
       "      <th>NumberOfTime60-89DaysPastDueNotWorse</th>\n",
       "      <th>NumberOfDependents</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1732</th>\n",
       "      <td>1</td>\n",
       "      <td>1.0</td>\n",
       "      <td>27</td>\n",
       "      <td>98</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2700.000000</td>\n",
       "      <td>0</td>\n",
       "      <td>98</td>\n",
       "      <td>0</td>\n",
       "      <td>98</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2285</th>\n",
       "      <td>0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>22</td>\n",
       "      <td>98</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1510.067567</td>\n",
       "      <td>0</td>\n",
       "      <td>98</td>\n",
       "      <td>0</td>\n",
       "      <td>98</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3883</th>\n",
       "      <td>0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>38</td>\n",
       "      <td>98</td>\n",
       "      <td>12.0</td>\n",
       "      <td>2072.020000</td>\n",
       "      <td>0</td>\n",
       "      <td>98</td>\n",
       "      <td>0</td>\n",
       "      <td>98</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4416</th>\n",
       "      <td>0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>21</td>\n",
       "      <td>98</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0</td>\n",
       "      <td>98</td>\n",
       "      <td>0</td>\n",
       "      <td>98</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4704</th>\n",
       "      <td>0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>21</td>\n",
       "      <td>98</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2000.000000</td>\n",
       "      <td>0</td>\n",
       "      <td>98</td>\n",
       "      <td>0</td>\n",
       "      <td>98</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>146667</th>\n",
       "      <td>1</td>\n",
       "      <td>1.0</td>\n",
       "      <td>25</td>\n",
       "      <td>98</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2067.533571</td>\n",
       "      <td>0</td>\n",
       "      <td>98</td>\n",
       "      <td>0</td>\n",
       "      <td>98</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>147180</th>\n",
       "      <td>1</td>\n",
       "      <td>1.0</td>\n",
       "      <td>68</td>\n",
       "      <td>98</td>\n",
       "      <td>255.0</td>\n",
       "      <td>37.120000</td>\n",
       "      <td>0</td>\n",
       "      <td>98</td>\n",
       "      <td>0</td>\n",
       "      <td>98</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>148548</th>\n",
       "      <td>1</td>\n",
       "      <td>1.0</td>\n",
       "      <td>24</td>\n",
       "      <td>98</td>\n",
       "      <td>54.0</td>\n",
       "      <td>511.470000</td>\n",
       "      <td>0</td>\n",
       "      <td>98</td>\n",
       "      <td>0</td>\n",
       "      <td>98</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>148634</th>\n",
       "      <td>0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>26</td>\n",
       "      <td>98</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2000.000000</td>\n",
       "      <td>0</td>\n",
       "      <td>98</td>\n",
       "      <td>0</td>\n",
       "      <td>98</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>148833</th>\n",
       "      <td>1</td>\n",
       "      <td>1.0</td>\n",
       "      <td>34</td>\n",
       "      <td>98</td>\n",
       "      <td>9.0</td>\n",
       "      <td>2341.960000</td>\n",
       "      <td>0</td>\n",
       "      <td>98</td>\n",
       "      <td>0</td>\n",
       "      <td>98</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>225 rows × 11 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "        SeriousDlqin2yrs  RevolvingUtilizationOfUnsecuredLines  age  \\\n",
       "1732                   1                                   1.0   27   \n",
       "2285                   0                                   1.0   22   \n",
       "3883                   0                                   1.0   38   \n",
       "4416                   0                                   1.0   21   \n",
       "4704                   0                                   1.0   21   \n",
       "...                  ...                                   ...  ...   \n",
       "146667                 1                                   1.0   25   \n",
       "147180                 1                                   1.0   68   \n",
       "148548                 1                                   1.0   24   \n",
       "148634                 0                                   1.0   26   \n",
       "148833                 1                                   1.0   34   \n",
       "\n",
       "        NumberOfTime30-59DaysPastDueNotWorse  DebtRatio  MonthlyIncome  \\\n",
       "1732                                      98        0.0    2700.000000   \n",
       "2285                                      98        0.0    1510.067567   \n",
       "3883                                      98       12.0    2072.020000   \n",
       "4416                                      98        0.0       0.000000   \n",
       "4704                                      98        0.0    2000.000000   \n",
       "...                                      ...        ...            ...   \n",
       "146667                                    98        0.0    2067.533571   \n",
       "147180                                    98      255.0      37.120000   \n",
       "148548                                    98       54.0     511.470000   \n",
       "148634                                    98        0.0    2000.000000   \n",
       "148833                                    98        9.0    2341.960000   \n",
       "\n",
       "        NumberOfOpenCreditLinesAndLoans  NumberOfTimes90DaysLate  \\\n",
       "1732                                  0                       98   \n",
       "2285                                  0                       98   \n",
       "3883                                  0                       98   \n",
       "4416                                  0                       98   \n",
       "4704                                  0                       98   \n",
       "...                                 ...                      ...   \n",
       "146667                                0                       98   \n",
       "147180                                0                       98   \n",
       "148548                                0                       98   \n",
       "148634                                0                       98   \n",
       "148833                                0                       98   \n",
       "\n",
       "        NumberRealEstateLoansOrLines  NumberOfTime60-89DaysPastDueNotWorse  \\\n",
       "1732                               0                                    98   \n",
       "2285                               0                                    98   \n",
       "3883                               0                                    98   \n",
       "4416                               0                                    98   \n",
       "4704                               0                                    98   \n",
       "...                              ...                                   ...   \n",
       "146667                             0                                    98   \n",
       "147180                             0                                    98   \n",
       "148548                             0                                    98   \n",
       "148634                             0                                    98   \n",
       "148833                             0                                    98   \n",
       "\n",
       "        NumberOfDependents  \n",
       "1732                   0.0  \n",
       "2285                   0.0  \n",
       "3883                   0.0  \n",
       "4416                   0.0  \n",
       "4704                   0.0  \n",
       "...                    ...  \n",
       "146667                 0.0  \n",
       "147180                 0.0  \n",
       "148548                 0.0  \n",
       "148634                 0.0  \n",
       "148833                 0.0  \n",
       "\n",
       "[225 rows x 11 columns]"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data[data.loc[:,\"NumberOfTimes90DaysLate\"] > 90]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "SeriousDlqin2yrs                        225\n",
       "RevolvingUtilizationOfUnsecuredLines    225\n",
       "age                                     225\n",
       "NumberOfTime30-59DaysPastDueNotWorse    225\n",
       "DebtRatio                               225\n",
       "MonthlyIncome                           225\n",
       "NumberOfOpenCreditLinesAndLoans         225\n",
       "NumberOfTimes90DaysLate                 225\n",
       "NumberRealEstateLoansOrLines            225\n",
       "NumberOfTime60-89DaysPastDueNotWorse    225\n",
       "NumberOfDependents                      225\n",
       "dtype: int64"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data[data.loc[:,\"NumberOfTimes90DaysLate\"] > 90].count()\n",
    "#有225个样本存在这样的情况，并且这些样本，我们观察一下，标签并不都是1，他们并不都是坏客户。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0     141107\n",
       "1       5232\n",
       "2       1555\n",
       "3        667\n",
       "4        291\n",
       "98       220\n",
       "5        131\n",
       "6         80\n",
       "7         38\n",
       "8         21\n",
       "9         19\n",
       "10         8\n",
       "11         5\n",
       "96         5\n",
       "13         4\n",
       "12         2\n",
       "14         2\n",
       "15         2\n",
       "17         1\n",
       "Name: NumberOfTimes90DaysLate, dtype: int64"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.loc[:,\"NumberOfTimes90DaysLate\"].value_counts()\n",
    "#98 96 为异常值，应该把它们删除。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [],
   "source": [
    "#删除异常值\n",
    "data = data[data.loc[:,\"NumberOfTimes90DaysLate\"] < 90]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 149165 entries, 0 to 149164\n",
      "Data columns (total 11 columns):\n",
      " #   Column                                Non-Null Count   Dtype  \n",
      "---  ------                                --------------   -----  \n",
      " 0   SeriousDlqin2yrs                      149165 non-null  int64  \n",
      " 1   RevolvingUtilizationOfUnsecuredLines  149165 non-null  float64\n",
      " 2   age                                   149165 non-null  int64  \n",
      " 3   NumberOfTime30-59DaysPastDueNotWorse  149165 non-null  int64  \n",
      " 4   DebtRatio                             149165 non-null  float64\n",
      " 5   MonthlyIncome                         149165 non-null  float64\n",
      " 6   NumberOfOpenCreditLinesAndLoans       149165 non-null  int64  \n",
      " 7   NumberOfTimes90DaysLate               149165 non-null  int64  \n",
      " 8   NumberRealEstateLoansOrLines          149165 non-null  int64  \n",
      " 9   NumberOfTime60-89DaysPastDueNotWorse  149165 non-null  int64  \n",
      " 10  NumberOfDependents                    149165 non-null  float64\n",
      "dtypes: float64(4), int64(7)\n",
      "memory usage: 12.5 MB\n"
     ]
    }
   ],
   "source": [
    "#一定要恢复索引\n",
    "data.index = range(data.shape[0])\n",
    "data.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>count</th>\n",
       "      <th>mean</th>\n",
       "      <th>std</th>\n",
       "      <th>min</th>\n",
       "      <th>1%</th>\n",
       "      <th>10%</th>\n",
       "      <th>25%</th>\n",
       "      <th>50%</th>\n",
       "      <th>75%</th>\n",
       "      <th>90%</th>\n",
       "      <th>99%</th>\n",
       "      <th>max</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>SeriousDlqin2yrs</th>\n",
       "      <td>149165.0</td>\n",
       "      <td>0.066188</td>\n",
       "      <td>0.248612</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.00000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>RevolvingUtilizationOfUnsecuredLines</th>\n",
       "      <td>149165.0</td>\n",
       "      <td>6.078770</td>\n",
       "      <td>250.453111</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.003174</td>\n",
       "      <td>0.030033</td>\n",
       "      <td>0.153615</td>\n",
       "      <td>0.553698</td>\n",
       "      <td>0.97502</td>\n",
       "      <td>1.094061</td>\n",
       "      <td>50708.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>age</th>\n",
       "      <td>149165.0</td>\n",
       "      <td>52.331076</td>\n",
       "      <td>14.714114</td>\n",
       "      <td>21.0</td>\n",
       "      <td>24.0</td>\n",
       "      <td>33.000000</td>\n",
       "      <td>41.000000</td>\n",
       "      <td>52.000000</td>\n",
       "      <td>63.000000</td>\n",
       "      <td>72.00000</td>\n",
       "      <td>87.000000</td>\n",
       "      <td>109.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>NumberOfTime30-59DaysPastDueNotWorse</th>\n",
       "      <td>149165.0</td>\n",
       "      <td>0.246720</td>\n",
       "      <td>0.698935</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.00000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>13.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>DebtRatio</th>\n",
       "      <td>149165.0</td>\n",
       "      <td>354.963542</td>\n",
       "      <td>2043.344496</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.036385</td>\n",
       "      <td>0.178211</td>\n",
       "      <td>0.368619</td>\n",
       "      <td>0.876994</td>\n",
       "      <td>1277.30000</td>\n",
       "      <td>4989.360000</td>\n",
       "      <td>329664.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>MonthlyIncome</th>\n",
       "      <td>149165.0</td>\n",
       "      <td>5429.160866</td>\n",
       "      <td>13246.392558</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.170000</td>\n",
       "      <td>1800.000000</td>\n",
       "      <td>4435.000000</td>\n",
       "      <td>7417.000000</td>\n",
       "      <td>10800.00000</td>\n",
       "      <td>23250.000000</td>\n",
       "      <td>3008750.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>NumberOfOpenCreditLinesAndLoans</th>\n",
       "      <td>149165.0</td>\n",
       "      <td>8.493688</td>\n",
       "      <td>5.129841</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>5.000000</td>\n",
       "      <td>8.000000</td>\n",
       "      <td>11.000000</td>\n",
       "      <td>15.00000</td>\n",
       "      <td>24.000000</td>\n",
       "      <td>58.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>NumberOfTimes90DaysLate</th>\n",
       "      <td>149165.0</td>\n",
       "      <td>0.090725</td>\n",
       "      <td>0.486354</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.00000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>17.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>NumberRealEstateLoansOrLines</th>\n",
       "      <td>149165.0</td>\n",
       "      <td>1.023927</td>\n",
       "      <td>1.130350</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>2.00000</td>\n",
       "      <td>4.000000</td>\n",
       "      <td>54.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>NumberOfTime60-89DaysPastDueNotWorse</th>\n",
       "      <td>149165.0</td>\n",
       "      <td>0.065069</td>\n",
       "      <td>0.330675</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.00000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>11.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>NumberOfDependents</th>\n",
       "      <td>149165.0</td>\n",
       "      <td>0.740911</td>\n",
       "      <td>1.108534</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>2.00000</td>\n",
       "      <td>4.000000</td>\n",
       "      <td>20.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                         count         mean           std  \\\n",
       "SeriousDlqin2yrs                      149165.0     0.066188      0.248612   \n",
       "RevolvingUtilizationOfUnsecuredLines  149165.0     6.078770    250.453111   \n",
       "age                                   149165.0    52.331076     14.714114   \n",
       "NumberOfTime30-59DaysPastDueNotWorse  149165.0     0.246720      0.698935   \n",
       "DebtRatio                             149165.0   354.963542   2043.344496   \n",
       "MonthlyIncome                         149165.0  5429.160866  13246.392558   \n",
       "NumberOfOpenCreditLinesAndLoans       149165.0     8.493688      5.129841   \n",
       "NumberOfTimes90DaysLate               149165.0     0.090725      0.486354   \n",
       "NumberRealEstateLoansOrLines          149165.0     1.023927      1.130350   \n",
       "NumberOfTime60-89DaysPastDueNotWorse  149165.0     0.065069      0.330675   \n",
       "NumberOfDependents                    149165.0     0.740911      1.108534   \n",
       "\n",
       "                                       min    1%        10%          25%  \\\n",
       "SeriousDlqin2yrs                       0.0   0.0   0.000000     0.000000   \n",
       "RevolvingUtilizationOfUnsecuredLines   0.0   0.0   0.003174     0.030033   \n",
       "age                                   21.0  24.0  33.000000    41.000000   \n",
       "NumberOfTime30-59DaysPastDueNotWorse   0.0   0.0   0.000000     0.000000   \n",
       "DebtRatio                              0.0   0.0   0.036385     0.178211   \n",
       "MonthlyIncome                          0.0   0.0   0.170000  1800.000000   \n",
       "NumberOfOpenCreditLinesAndLoans        0.0   1.0   3.000000     5.000000   \n",
       "NumberOfTimes90DaysLate                0.0   0.0   0.000000     0.000000   \n",
       "NumberRealEstateLoansOrLines           0.0   0.0   0.000000     0.000000   \n",
       "NumberOfTime60-89DaysPastDueNotWorse   0.0   0.0   0.000000     0.000000   \n",
       "NumberOfDependents                     0.0   0.0   0.000000     0.000000   \n",
       "\n",
       "                                              50%          75%          90%  \\\n",
       "SeriousDlqin2yrs                         0.000000     0.000000      0.00000   \n",
       "RevolvingUtilizationOfUnsecuredLines     0.153615     0.553698      0.97502   \n",
       "age                                     52.000000    63.000000     72.00000   \n",
       "NumberOfTime30-59DaysPastDueNotWorse     0.000000     0.000000      1.00000   \n",
       "DebtRatio                                0.368619     0.876994   1277.30000   \n",
       "MonthlyIncome                         4435.000000  7417.000000  10800.00000   \n",
       "NumberOfOpenCreditLinesAndLoans          8.000000    11.000000     15.00000   \n",
       "NumberOfTimes90DaysLate                  0.000000     0.000000      0.00000   \n",
       "NumberRealEstateLoansOrLines             1.000000     2.000000      2.00000   \n",
       "NumberOfTime60-89DaysPastDueNotWorse     0.000000     0.000000      0.00000   \n",
       "NumberOfDependents                       0.000000     1.000000      2.00000   \n",
       "\n",
       "                                               99%        max  \n",
       "SeriousDlqin2yrs                          1.000000        1.0  \n",
       "RevolvingUtilizationOfUnsecuredLines      1.094061    50708.0  \n",
       "age                                      87.000000      109.0  \n",
       "NumberOfTime30-59DaysPastDueNotWorse      3.000000       13.0  \n",
       "DebtRatio                              4989.360000   329664.0  \n",
       "MonthlyIncome                         23250.000000  3008750.0  \n",
       "NumberOfOpenCreditLinesAndLoans          24.000000       58.0  \n",
       "NumberOfTimes90DaysLate                   2.000000       17.0  \n",
       "NumberRealEstateLoansOrLines              4.000000       54.0  \n",
       "NumberOfTime60-89DaysPastDueNotWorse      2.000000       11.0  \n",
       "NumberOfDependents                        4.000000       20.0  "
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.describe([0.01,0.1,0.25,.5,.75,.9,.99]).T\n",
    "#不做量纲统一和标准化，因为业务人员需要原本量纲作为参考。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>SeriousDlqin2yrs</th>\n",
       "      <th>RevolvingUtilizationOfUnsecuredLines</th>\n",
       "      <th>age</th>\n",
       "      <th>NumberOfTime30-59DaysPastDueNotWorse</th>\n",
       "      <th>DebtRatio</th>\n",
       "      <th>MonthlyIncome</th>\n",
       "      <th>NumberOfOpenCreditLinesAndLoans</th>\n",
       "      <th>NumberOfTimes90DaysLate</th>\n",
       "      <th>NumberRealEstateLoansOrLines</th>\n",
       "      <th>NumberOfTime60-89DaysPastDueNotWorse</th>\n",
       "      <th>NumberOfDependents</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0.766127</td>\n",
       "      <td>45</td>\n",
       "      <td>2</td>\n",
       "      <td>0.802982</td>\n",
       "      <td>9120.0</td>\n",
       "      <td>13</td>\n",
       "      <td>0</td>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0</td>\n",
       "      <td>0.957151</td>\n",
       "      <td>40</td>\n",
       "      <td>0</td>\n",
       "      <td>0.121876</td>\n",
       "      <td>2600.0</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0</td>\n",
       "      <td>0.658180</td>\n",
       "      <td>38</td>\n",
       "      <td>1</td>\n",
       "      <td>0.085113</td>\n",
       "      <td>3042.0</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0</td>\n",
       "      <td>0.233810</td>\n",
       "      <td>30</td>\n",
       "      <td>0</td>\n",
       "      <td>0.036050</td>\n",
       "      <td>3300.0</td>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>0.907239</td>\n",
       "      <td>49</td>\n",
       "      <td>1</td>\n",
       "      <td>0.024926</td>\n",
       "      <td>63588.0</td>\n",
       "      <td>7</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   SeriousDlqin2yrs  RevolvingUtilizationOfUnsecuredLines  age  \\\n",
       "0                 1                              0.766127   45   \n",
       "1                 0                              0.957151   40   \n",
       "2                 0                              0.658180   38   \n",
       "3                 0                              0.233810   30   \n",
       "4                 0                              0.907239   49   \n",
       "\n",
       "   NumberOfTime30-59DaysPastDueNotWorse  DebtRatio  MonthlyIncome  \\\n",
       "0                                     2   0.802982         9120.0   \n",
       "1                                     0   0.121876         2600.0   \n",
       "2                                     1   0.085113         3042.0   \n",
       "3                                     0   0.036050         3300.0   \n",
       "4                                     1   0.024926        63588.0   \n",
       "\n",
       "   NumberOfOpenCreditLinesAndLoans  NumberOfTimes90DaysLate  \\\n",
       "0                               13                        0   \n",
       "1                                4                        0   \n",
       "2                                2                        1   \n",
       "3                                5                        0   \n",
       "4                                7                        0   \n",
       "\n",
       "   NumberRealEstateLoansOrLines  NumberOfTime60-89DaysPastDueNotWorse  \\\n",
       "0                             6                                     0   \n",
       "1                             0                                     0   \n",
       "2                             0                                     0   \n",
       "3                             0                                     0   \n",
       "4                             1                                     0   \n",
       "\n",
       "   NumberOfDependents  \n",
       "0                 2.0  \n",
       "1                 1.0  \n",
       "2                 0.0  \n",
       "3                 0.0  \n",
       "4                 0.0  "
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 处理标签分布不均"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0    139292\n",
       "1      9873\n",
       "Name: SeriousDlqin2yrs, dtype: int64"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#探索标签的分布\n",
    "X = data.iloc[:,1:]\n",
    "y = data.iloc[:,0]\n",
    " \n",
    "y.value_counts()#查看每一类别值得数据量，查看样本是否均衡"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\Apps\\anaconda\\lib\\site-packages\\tensorflow\\python\\framework\\dtypes.py:516: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
      "  _np_qint8 = np.dtype([(\"qint8\", np.int8, 1)])\n",
      "D:\\Apps\\anaconda\\lib\\site-packages\\tensorflow\\python\\framework\\dtypes.py:517: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
      "  _np_quint8 = np.dtype([(\"quint8\", np.uint8, 1)])\n",
      "D:\\Apps\\anaconda\\lib\\site-packages\\tensorflow\\python\\framework\\dtypes.py:518: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
      "  _np_qint16 = np.dtype([(\"qint16\", np.int16, 1)])\n",
      "D:\\Apps\\anaconda\\lib\\site-packages\\tensorflow\\python\\framework\\dtypes.py:519: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
      "  _np_quint16 = np.dtype([(\"quint16\", np.uint16, 1)])\n",
      "D:\\Apps\\anaconda\\lib\\site-packages\\tensorflow\\python\\framework\\dtypes.py:520: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
      "  _np_qint32 = np.dtype([(\"qint32\", np.int32, 1)])\n",
      "D:\\Apps\\anaconda\\lib\\site-packages\\tensorflow\\python\\framework\\dtypes.py:525: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
      "  np_resource = np.dtype([(\"resource\", np.ubyte, 1)])\n",
      "D:\\Apps\\anaconda\\lib\\site-packages\\tensorboard\\compat\\tensorflow_stub\\dtypes.py:541: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
      "  _np_qint8 = np.dtype([(\"qint8\", np.int8, 1)])\n",
      "D:\\Apps\\anaconda\\lib\\site-packages\\tensorboard\\compat\\tensorflow_stub\\dtypes.py:542: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
      "  _np_quint8 = np.dtype([(\"quint8\", np.uint8, 1)])\n",
      "D:\\Apps\\anaconda\\lib\\site-packages\\tensorboard\\compat\\tensorflow_stub\\dtypes.py:543: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
      "  _np_qint16 = np.dtype([(\"qint16\", np.int16, 1)])\n",
      "D:\\Apps\\anaconda\\lib\\site-packages\\tensorboard\\compat\\tensorflow_stub\\dtypes.py:544: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
      "  _np_quint16 = np.dtype([(\"quint16\", np.uint16, 1)])\n",
      "D:\\Apps\\anaconda\\lib\\site-packages\\tensorboard\\compat\\tensorflow_stub\\dtypes.py:545: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
      "  _np_qint32 = np.dtype([(\"qint32\", np.int32, 1)])\n",
      "D:\\Apps\\anaconda\\lib\\site-packages\\tensorboard\\compat\\tensorflow_stub\\dtypes.py:550: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
      "  np_resource = np.dtype([(\"resource\", np.ubyte, 1)])\n"
     ]
    }
   ],
   "source": [
    "#imblearn是专门用来处理不平衡数据集的库，在处理样本不均衡问题中性能高过sklearn很多\n",
    "#imblearn里面也是一个个的类，也需要进行实例化，fit拟合，和sklearn用法相似\n",
    "#重点：pip install imblearn \n",
    "import imblearn"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'0.6.0'"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "imblearn.__version__"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [],
   "source": [
    "from imblearn.over_sampling import SMOTE #导入上采样 SMOTE方法\n",
    "\n",
    "sm = SMOTE(random_state=42)\n",
    "X,y = sm.fit_sample(X,y) #返回已经上采样完毕过后的特征矩阵和标签"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1    139292\n",
       "0    139292\n",
       "Name: SeriousDlqin2yrs, dtype: int64"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y.value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(278584, 10)"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(278584,)"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1    139292\n",
       "0    139292\n",
       "Name: SeriousDlqin2yrs, dtype: int64"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.Series(y).value_counts()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 划分数据集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.model_selection import train_test_split\n",
    "X = pd.DataFrame(X)\n",
    "y = pd.DataFrame(y)\n",
    " \n",
    "X_train, X_vali, Y_train, Y_vali = train_test_split(X,y,test_size=0.3,random_state=420)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [],
   "source": [
    "model_data = pd.concat([Y_train, X_train], axis=1)#训练集 标签为第一列\n",
    "model_data.index = range(model_data.shape[0])\n",
    "model_data.columns = data.columns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [],
   "source": [
    "vali_data = pd.concat([Y_vali, X_vali], axis=1)#验证集 标签为第一列\n",
    "vali_data.index = range(vali_data.shape[0])\n",
    "vali_data.columns = data.columns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [],
   "source": [
    "model_data.to_csv(r\"model_data.csv\")#训练数据\n",
    "vali_data.to_csv(r\"vali_data.csv\")#验证数据"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 特征处理-分箱\n",
    "\n",
    "**1.cut 等距分箱**\n",
    "\n",
    "**2.qcut 等频分箱**\n",
    "\n",
    "pd.qcut，基于分位数的分箱函数，本质是将连续型变量离散化\n",
    "\n",
    "只能够处理一维数据。返回箱子的上限和下限\n",
    "\n",
    "参数q：要分箱的个数\n",
    "\n",
    "参数retbins=True来要求同时返回结构为索引为样本索引，元素为分到的箱子的Series\n",
    "\n",
    "现在返回两个值：每个样本属于哪个箱子，以及所有箱子的上限和下限"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### “age”分箱"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>SeriousDlqin2yrs</th>\n",
       "      <th>RevolvingUtilizationOfUnsecuredLines</th>\n",
       "      <th>age</th>\n",
       "      <th>NumberOfTime30-59DaysPastDueNotWorse</th>\n",
       "      <th>DebtRatio</th>\n",
       "      <th>MonthlyIncome</th>\n",
       "      <th>NumberOfOpenCreditLinesAndLoans</th>\n",
       "      <th>NumberOfTimes90DaysLate</th>\n",
       "      <th>NumberRealEstateLoansOrLines</th>\n",
       "      <th>NumberOfTime60-89DaysPastDueNotWorse</th>\n",
       "      <th>NumberOfDependents</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>0.015404</td>\n",
       "      <td>53</td>\n",
       "      <td>0</td>\n",
       "      <td>0.121802</td>\n",
       "      <td>4728.0</td>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0</td>\n",
       "      <td>0.168311</td>\n",
       "      <td>63</td>\n",
       "      <td>0</td>\n",
       "      <td>0.141964</td>\n",
       "      <td>1119.0</td>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>1.063570</td>\n",
       "      <td>39</td>\n",
       "      <td>1</td>\n",
       "      <td>0.417663</td>\n",
       "      <td>3500.0</td>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>3.716057</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0</td>\n",
       "      <td>0.088684</td>\n",
       "      <td>73</td>\n",
       "      <td>0</td>\n",
       "      <td>0.522822</td>\n",
       "      <td>5301.0</td>\n",
       "      <td>11</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1</td>\n",
       "      <td>0.622999</td>\n",
       "      <td>53</td>\n",
       "      <td>0</td>\n",
       "      <td>0.423650</td>\n",
       "      <td>13000.0</td>\n",
       "      <td>9</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>0.181999</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   SeriousDlqin2yrs  RevolvingUtilizationOfUnsecuredLines  age  \\\n",
       "0                 0                              0.015404   53   \n",
       "1                 0                              0.168311   63   \n",
       "2                 1                              1.063570   39   \n",
       "3                 0                              0.088684   73   \n",
       "4                 1                              0.622999   53   \n",
       "\n",
       "   NumberOfTime30-59DaysPastDueNotWorse  DebtRatio  MonthlyIncome  \\\n",
       "0                                     0   0.121802         4728.0   \n",
       "1                                     0   0.141964         1119.0   \n",
       "2                                     1   0.417663         3500.0   \n",
       "3                                     0   0.522822         5301.0   \n",
       "4                                     0   0.423650        13000.0   \n",
       "\n",
       "   NumberOfOpenCreditLinesAndLoans  NumberOfTimes90DaysLate  \\\n",
       "0                                5                        0   \n",
       "1                                5                        0   \n",
       "2                                5                        1   \n",
       "3                               11                        0   \n",
       "4                                9                        0   \n",
       "\n",
       "   NumberRealEstateLoansOrLines  NumberOfTime60-89DaysPastDueNotWorse  \\\n",
       "0                             0                                     0   \n",
       "1                             0                                     0   \n",
       "2                             0                                     2   \n",
       "3                             2                                     0   \n",
       "4                             2                                     0   \n",
       "\n",
       "   NumberOfDependents  \n",
       "0            0.000000  \n",
       "1            0.000000  \n",
       "2            3.716057  \n",
       "3            0.000000  \n",
       "4            0.181999  "
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model_data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [],
   "source": [
    "#按照等频对需要分箱的列进行分箱\n",
    "\n",
    "#“age”为例子\n",
    "model_data[\"qcut\"],updown = pd.qcut(model_data[\"age\"], retbins=True, q=20)#等频分箱"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(0         (52.0, 54.0]\n",
       " 1         (61.0, 64.0]\n",
       " 2         (36.0, 39.0]\n",
       " 3         (68.0, 74.0]\n",
       " 4         (52.0, 54.0]\n",
       "               ...     \n",
       " 195003    (31.0, 34.0]\n",
       " 195004    (48.0, 50.0]\n",
       " 195005    (45.0, 46.0]\n",
       " 195006    (61.0, 64.0]\n",
       " 195007    (52.0, 54.0]\n",
       " Name: age, Length: 195008, dtype: category\n",
       " Categories (20, interval[float64]): [(20.999, 28.0] < (28.0, 31.0] < (31.0, 34.0] < (34.0, 36.0] ... (61.0, 64.0] < (64.0, 68.0] < (68.0, 74.0] < (74.0, 107.0]],\n",
       " array([ 21.,  28.,  31.,  34.,  36.,  39.,  41.,  43.,  45.,  46.,  48.,\n",
       "         50.,  52.,  54.,  56.,  58.,  61.,  64.,  68.,  74., 107.]))"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.qcut(model_data[\"age\"], retbins=True, q=20)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 21.,  28.,  31.,  34.,  36.,  39.,  41.,  43.,  45.,  46.,  48.,\n",
       "        50.,  52.,  54.,  56.,  58.,  61.,  64.,  68.,  74., 107.])"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "updown"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>SeriousDlqin2yrs</th>\n",
       "      <th>RevolvingUtilizationOfUnsecuredLines</th>\n",
       "      <th>age</th>\n",
       "      <th>NumberOfTime30-59DaysPastDueNotWorse</th>\n",
       "      <th>DebtRatio</th>\n",
       "      <th>MonthlyIncome</th>\n",
       "      <th>NumberOfOpenCreditLinesAndLoans</th>\n",
       "      <th>NumberOfTimes90DaysLate</th>\n",
       "      <th>NumberRealEstateLoansOrLines</th>\n",
       "      <th>NumberOfTime60-89DaysPastDueNotWorse</th>\n",
       "      <th>NumberOfDependents</th>\n",
       "      <th>qcut</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>0.015404</td>\n",
       "      <td>53</td>\n",
       "      <td>0</td>\n",
       "      <td>0.121802</td>\n",
       "      <td>4728.0</td>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>(52.0, 54.0]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0</td>\n",
       "      <td>0.168311</td>\n",
       "      <td>63</td>\n",
       "      <td>0</td>\n",
       "      <td>0.141964</td>\n",
       "      <td>1119.0</td>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>(61.0, 64.0]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>1.063570</td>\n",
       "      <td>39</td>\n",
       "      <td>1</td>\n",
       "      <td>0.417663</td>\n",
       "      <td>3500.0</td>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>3.716057</td>\n",
       "      <td>(36.0, 39.0]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0</td>\n",
       "      <td>0.088684</td>\n",
       "      <td>73</td>\n",
       "      <td>0</td>\n",
       "      <td>0.522822</td>\n",
       "      <td>5301.0</td>\n",
       "      <td>11</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>(68.0, 74.0]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1</td>\n",
       "      <td>0.622999</td>\n",
       "      <td>53</td>\n",
       "      <td>0</td>\n",
       "      <td>0.423650</td>\n",
       "      <td>13000.0</td>\n",
       "      <td>9</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>0.181999</td>\n",
       "      <td>(52.0, 54.0]</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   SeriousDlqin2yrs  RevolvingUtilizationOfUnsecuredLines  age  \\\n",
       "0                 0                              0.015404   53   \n",
       "1                 0                              0.168311   63   \n",
       "2                 1                              1.063570   39   \n",
       "3                 0                              0.088684   73   \n",
       "4                 1                              0.622999   53   \n",
       "\n",
       "   NumberOfTime30-59DaysPastDueNotWorse  DebtRatio  MonthlyIncome  \\\n",
       "0                                     0   0.121802         4728.0   \n",
       "1                                     0   0.141964         1119.0   \n",
       "2                                     1   0.417663         3500.0   \n",
       "3                                     0   0.522822         5301.0   \n",
       "4                                     0   0.423650        13000.0   \n",
       "\n",
       "   NumberOfOpenCreditLinesAndLoans  NumberOfTimes90DaysLate  \\\n",
       "0                                5                        0   \n",
       "1                                5                        0   \n",
       "2                                5                        1   \n",
       "3                               11                        0   \n",
       "4                                9                        0   \n",
       "\n",
       "   NumberRealEstateLoansOrLines  NumberOfTime60-89DaysPastDueNotWorse  \\\n",
       "0                             0                                     0   \n",
       "1                             0                                     0   \n",
       "2                             0                                     2   \n",
       "3                             2                                     0   \n",
       "4                             2                                     0   \n",
       "\n",
       "   NumberOfDependents          qcut  \n",
       "0            0.000000  (52.0, 54.0]  \n",
       "1            0.000000  (61.0, 64.0]  \n",
       "2            3.716057  (36.0, 39.0]  \n",
       "3            0.000000  (68.0, 74.0]  \n",
       "4            0.181999  (52.0, 54.0]  "
      ]
     },
     "execution_count": 46,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#在这里时让model_data新添加一列叫做“分箱”，这一列其实就是每个样本所对应的箱子\n",
    "model_data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(36.0, 39.0]      12656\n",
       "(20.999, 28.0]    11791\n",
       "(58.0, 61.0]      11412\n",
       "(48.0, 50.0]      11123\n",
       "(46.0, 48.0]      10977\n",
       "(31.0, 34.0]      10792\n",
       "(50.0, 52.0]      10559\n",
       "(43.0, 45.0]      10347\n",
       "(61.0, 64.0]      10150\n",
       "(39.0, 41.0]       9788\n",
       "(52.0, 54.0]       9696\n",
       "(41.0, 43.0]       9696\n",
       "(28.0, 31.0]       9534\n",
       "(74.0, 107.0]      9120\n",
       "(64.0, 68.0]       8914\n",
       "(54.0, 56.0]       8692\n",
       "(68.0, 74.0]       8659\n",
       "(56.0, 58.0]       7887\n",
       "(34.0, 36.0]       7518\n",
       "(45.0, 46.0]       5697\n",
       "Name: qcut, dtype: int64"
      ]
     },
     "execution_count": 47,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model_data[\"qcut\"].value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 21.,  28.,  31.,  34.,  36.,  39.,  41.,  43.,  45.,  46.,  48.,\n",
       "        50.,  52.,  54.,  56.,  58.,  61.,  64.,  68.,  74., 107.])"
      ]
     },
     "execution_count": 48,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#所有箱子的上限和下限\n",
    "updown"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 统计每个分箱中0和1的数量\n",
    "# 这里使用了数据透视表的功能groupby\n",
    "coount_y0 = model_data[model_data[\"SeriousDlqin2yrs\"] == 0].groupby(by=\"qcut\").count()[\"SeriousDlqin2yrs\"]\n",
    "\n",
    "coount_y1 = model_data[model_data[\"SeriousDlqin2yrs\"] == 1].groupby(by=\"qcut\").count()[\"SeriousDlqin2yrs\"]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "qcut\n",
       "(20.999, 28.0]    7548\n",
       "(28.0, 31.0]      5963\n",
       "(31.0, 34.0]      6717\n",
       "(34.0, 36.0]      4610\n",
       "(36.0, 39.0]      7474\n",
       "(39.0, 41.0]      5832\n",
       "(41.0, 43.0]      5694\n",
       "(43.0, 45.0]      5958\n",
       "(45.0, 46.0]      3278\n",
       "(46.0, 48.0]      6164\n",
       "(48.0, 50.0]      6223\n",
       "(50.0, 52.0]      5831\n",
       "(52.0, 54.0]      5015\n",
       "(54.0, 56.0]      4015\n",
       "(56.0, 58.0]      3404\n",
       "(58.0, 61.0]      4829\n",
       "(61.0, 64.0]      3182\n",
       "(64.0, 68.0]      2291\n",
       "(68.0, 74.0]      1906\n",
       "(74.0, 107.0]     1383\n",
       "Name: SeriousDlqin2yrs, dtype: int64"
      ]
     },
     "execution_count": 50,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "coount_y1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 21.,  28.,  31.,  34.,  36.,  39.,  41.,  43.,  45.,  46.,  48.,\n",
       "        50.,  52.,  54.,  56.,  58.,  61.,  64.,  68.,  74., 107.])"
      ]
     },
     "execution_count": 51,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "updown"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[(21.0, 28.0, 4243, 7548),\n",
       " (28.0, 31.0, 3571, 5963),\n",
       " (31.0, 34.0, 4075, 6717),\n",
       " (34.0, 36.0, 2908, 4610),\n",
       " (36.0, 39.0, 5182, 7474),\n",
       " (39.0, 41.0, 3956, 5832),\n",
       " (41.0, 43.0, 4002, 5694),\n",
       " (43.0, 45.0, 4389, 5958),\n",
       " (45.0, 46.0, 2419, 3278),\n",
       " (46.0, 48.0, 4813, 6164),\n",
       " (48.0, 50.0, 4900, 6223),\n",
       " (50.0, 52.0, 4728, 5831),\n",
       " (52.0, 54.0, 4681, 5015),\n",
       " (54.0, 56.0, 4677, 4015),\n",
       " (56.0, 58.0, 4483, 3404),\n",
       " (58.0, 61.0, 6583, 4829),\n",
       " (61.0, 64.0, 6968, 3182),\n",
       " (64.0, 68.0, 6623, 2291),\n",
       " (68.0, 74.0, 6753, 1906),\n",
       " (74.0, 107.0, 7737, 1383)]"
      ]
     },
     "execution_count": 52,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#num_bins值分别为每个区间的上界，下界，0出现的次数，1出现的次数\n",
    "num_bins = [*zip(updown,updown[1:],coount_y0,coount_y1)]\n",
    " \n",
    "#注意zip会按照最短列来进行结合\n",
    "num_bins"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 计算WOE IV 值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>min</th>\n",
       "      <th>max</th>\n",
       "      <th>count_0</th>\n",
       "      <th>count_1</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>21.0</td>\n",
       "      <td>28.0</td>\n",
       "      <td>4243</td>\n",
       "      <td>7548</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>28.0</td>\n",
       "      <td>31.0</td>\n",
       "      <td>3571</td>\n",
       "      <td>5963</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>31.0</td>\n",
       "      <td>34.0</td>\n",
       "      <td>4075</td>\n",
       "      <td>6717</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>34.0</td>\n",
       "      <td>36.0</td>\n",
       "      <td>2908</td>\n",
       "      <td>4610</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>36.0</td>\n",
       "      <td>39.0</td>\n",
       "      <td>5182</td>\n",
       "      <td>7474</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    min   max  count_0  count_1\n",
       "0  21.0  28.0     4243     7548\n",
       "1  28.0  31.0     3571     5963\n",
       "2  31.0  34.0     4075     6717\n",
       "3  34.0  36.0     2908     4610\n",
       "4  36.0  39.0     5182     7474"
      ]
     },
     "execution_count": 53,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "columns = ['min','max','count_0','count_1']\n",
    "df_age = pd.DataFrame(num_bins,columns=columns)\n",
    "df_age.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [],
   "source": [
    "#计算WOE和BAD RATE\n",
    "#BAD RATE与bad%不是一个东西\n",
    "#BAD RATE是一个箱中，坏的样本所占的比例 (bad/total)\n",
    "#而bad%是一个箱中的坏样本占整个特征中的坏样本的比例\n",
    " \n",
    "#计算 WOE值\n",
    "#df_age[\"total\"] = df_age.count_0 + df_age.count_1#一个箱子当中所有的样本数\n",
    "#df_age[\"percentage\"] = df_age.total / df_age.total.sum()#一个箱子里的样本数，占所有样本的比例\n",
    "#df_age[\"bad_rate\"] = df_age.count_1 / df_age.total#一个箱子坏样本的数量占一个箱子里边所有样本数的比例\n",
    "df_age[\"good%\"] = df_age.count_0/df_age.count_0.sum()#这个箱子里好样本个数/所有好样本的个数\n",
    "df_age[\"bad%\"] = df_age.count_1/df_age.count_1.sum()#这个箱子里坏样本个数/所有坏样本的个数\n",
    "df_age[\"woe\"] = np.log(df_age[\"good%\"] / df_age[\"bad%\"])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>min</th>\n",
       "      <th>max</th>\n",
       "      <th>count_0</th>\n",
       "      <th>count_1</th>\n",
       "      <th>good%</th>\n",
       "      <th>bad%</th>\n",
       "      <th>woe</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>21.0</td>\n",
       "      <td>28.0</td>\n",
       "      <td>4243</td>\n",
       "      <td>7548</td>\n",
       "      <td>0.043433</td>\n",
       "      <td>0.077561</td>\n",
       "      <td>-0.579848</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>28.0</td>\n",
       "      <td>31.0</td>\n",
       "      <td>3571</td>\n",
       "      <td>5963</td>\n",
       "      <td>0.036554</td>\n",
       "      <td>0.061274</td>\n",
       "      <td>-0.516564</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>31.0</td>\n",
       "      <td>34.0</td>\n",
       "      <td>4075</td>\n",
       "      <td>6717</td>\n",
       "      <td>0.041713</td>\n",
       "      <td>0.069022</td>\n",
       "      <td>-0.503607</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>34.0</td>\n",
       "      <td>36.0</td>\n",
       "      <td>2908</td>\n",
       "      <td>4610</td>\n",
       "      <td>0.029767</td>\n",
       "      <td>0.047371</td>\n",
       "      <td>-0.464598</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>36.0</td>\n",
       "      <td>39.0</td>\n",
       "      <td>5182</td>\n",
       "      <td>7474</td>\n",
       "      <td>0.053045</td>\n",
       "      <td>0.076801</td>\n",
       "      <td>-0.370075</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    min   max  count_0  count_1     good%      bad%       woe\n",
       "0  21.0  28.0     4243     7548  0.043433  0.077561 -0.579848\n",
       "1  28.0  31.0     3571     5963  0.036554  0.061274 -0.516564\n",
       "2  31.0  34.0     4075     6717  0.041713  0.069022 -0.503607\n",
       "3  34.0  36.0     2908     4610  0.029767  0.047371 -0.464598\n",
       "4  36.0  39.0     5182     7474  0.053045  0.076801 -0.370075"
      ]
     },
     "execution_count": 55,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_age.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [],
   "source": [
    "#计算IV值\n",
    "rate = df_age[\"good%\"] - df_age[\"bad%\"]\n",
    "iv = np.sum(rate * df_age.woe)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.3549903353193603"
      ]
     },
     "execution_count": 57,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "iv #‘age’的IV值很好"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [],
   "source": [
    "#封装成WOE函数\n",
    " \n",
    "def get_woe(num_bins):\n",
    "    # 通过 num_bins 数据计算 woe\n",
    "    columns = [\"min\",\"max\",\"count_0\",\"count_1\"]\n",
    "    df = pd.DataFrame(num_bins,columns=columns)\n",
    "\n",
    "    #df[\"total\"] = df.count_0 + df.count_1#一个箱子当中所有的样本数\n",
    "    #df[\"percentage\"] = df.total / df.total.sum()#一个箱子里的样本数，占所有样本的比例\n",
    "    #df[\"bad_rate\"] = df.count_1 / df.total#一个箱子坏样本的数量占一个箱子里边所有样本数的比例\n",
    "    df[\"good%\"] = df.count_0/df.count_0.sum()#这个箱子里好样本个数/所有好样本的个数\n",
    "    df[\"bad%\"] = df.count_1/df.count_1.sum()#这个箱子里坏样本个数/所有坏样本的个数\n",
    "    df[\"woe\"] = np.log(df[\"good%\"] / df[\"bad%\"])\n",
    "    return df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [],
   "source": [
    "#封装成IV函数\n",
    "def get_iv(df):\n",
    "    rate = df[\"good%\"] - df[\"bad%\"]\n",
    "    iv = np.sum(rate * df.woe)\n",
    "    return iv"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 卡方检验\n",
    "\n",
    "本质是为了检验两列数据的相似性，现在我们用来检验两个相邻的箱中数据的相似性。\n",
    "换句话说就是检查某一个类别型的自变量和因变量是否相关。例如：我们的因变量（标签）为买不买，某一个自变量是男女、是否相关。\n",
    "\n",
    "假设是变量独立的,P_value大，认为没有变量之间没有显著性影响,则接受原假设,变量独立。\n",
    "\n",
    "1.找到相邻两个箱子之间的p-value（p-value越大代表两个组越相似，则合并这两个相邻组）\n",
    "\n",
    "2.重复上述过程"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [],
   "source": [
    "num_bins_ = num_bins.copy()\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "import scipy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[(21.0, 28.0, 4243, 7548),\n",
       " (28.0, 31.0, 3571, 5963),\n",
       " (31.0, 34.0, 4075, 6717),\n",
       " (34.0, 36.0, 2908, 4610),\n",
       " (36.0, 39.0, 5182, 7474),\n",
       " (39.0, 41.0, 3956, 5832),\n",
       " (41.0, 43.0, 4002, 5694),\n",
       " (43.0, 45.0, 4389, 5958),\n",
       " (45.0, 46.0, 2419, 3278),\n",
       " (46.0, 48.0, 4813, 6164),\n",
       " (48.0, 50.0, 4900, 6223),\n",
       " (50.0, 52.0, 4728, 5831),\n",
       " (52.0, 54.0, 4681, 5015),\n",
       " (54.0, 56.0, 4677, 4015),\n",
       " (56.0, 58.0, 4483, 3404),\n",
       " (58.0, 61.0, 6583, 4829),\n",
       " (61.0, 64.0, 6968, 3182),\n",
       " (64.0, 68.0, 6623, 2291),\n",
       " (68.0, 74.0, 6753, 1906),\n",
       " (74.0, 107.0, 7737, 1383)]"
      ]
     },
     "execution_count": 61,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "num_bins_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "((4243, 7548), (3571, 5963))"
      ]
     },
     "execution_count": 62,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x1 = num_bins_[0][2:]\n",
    "x2 = num_bins_[1][2:]\n",
    "x1,x2\n",
    "#不同的箱中的零和一的个数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(4.845892246183692,\n",
       " 0.02771205231060821,\n",
       " 1,\n",
       " array([[4320.50991794, 7470.49008206],\n",
       "        [3493.49008206, 6040.50991794]]))"
      ]
     },
     "execution_count": 63,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pv = scipy.stats.chi2_contingency([x1,x2])\n",
    "pv"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.02771205231060821"
      ]
     },
     "execution_count": 64,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pv = scipy.stats.chi2_contingency([x1,x2])[1]\n",
    "pv \n",
    "# 0 返回 chi2 值，1 返回 p 值。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {},
   "outputs": [],
   "source": [
    "pvs = []\n",
    "for i in range(len(num_bins_)-1):\n",
    "        x1 = num_bins_[i][2:]\n",
    "        x2 = num_bins_[i+1][2: ]\n",
    "        # 0 返回 chi2 值，1 返回 p 值。\n",
    "        pv = scipy.stats.chi2_contingency([x1,x2])[1]#p值\n",
    "        # chi2 = scipy.stats.chi2_contingency([x1,x2])[0]#计算卡方值\n",
    "        pvs.append(pv)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[0.02771205231060821,\n",
       " 0.6657235186702088,\n",
       " 0.21247060523925312,\n",
       " 0.0015870019951071193,\n",
       " 0.43246833233726867,\n",
       " 0.2287702644112417,\n",
       " 0.10409183541368966,\n",
       " 0.9713906427180399,\n",
       " 0.09000761947914825,\n",
       " 0.7673024287987146,\n",
       " 0.28963121445393064,\n",
       " 6.487525018296239e-07,\n",
       " 7.740128742705297e-14,\n",
       " 9.392399598876483e-05,\n",
       " 0.24960423129094855,\n",
       " 5.1479372750419885e-62,\n",
       " 9.039381192353663e-18,\n",
       " 1.0840576800866774e-08,\n",
       " 8.593257669288905e-32]"
      ]
     },
     "execution_count": 66,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pvs #19次卡方检验的p-value"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "7"
      ]
     },
     "execution_count": 67,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pvs.index(max(pvs)) #取得最大p-value 让两个箱子合并"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[(21.0, 28.0, 4243, 7548),\n",
       " (28.0, 31.0, 3571, 5963),\n",
       " (31.0, 34.0, 4075, 6717),\n",
       " (34.0, 36.0, 2908, 4610),\n",
       " (36.0, 39.0, 5182, 7474),\n",
       " (39.0, 41.0, 3956, 5832),\n",
       " (41.0, 43.0, 4002, 5694),\n",
       " (43.0, 45.0, 4389, 5958),\n",
       " (45.0, 46.0, 2419, 3278),\n",
       " (46.0, 48.0, 4813, 6164),\n",
       " (48.0, 50.0, 4900, 6223),\n",
       " (50.0, 52.0, 4728, 5831),\n",
       " (52.0, 54.0, 4681, 5015),\n",
       " (54.0, 56.0, 4677, 4015),\n",
       " (56.0, 58.0, 4483, 3404),\n",
       " (58.0, 61.0, 6583, 4829),\n",
       " (61.0, 64.0, 6968, 3182),\n",
       " (64.0, 68.0, 6623, 2291),\n",
       " (68.0, 74.0, 6753, 1906),\n",
       " (74.0, 107.0, 7737, 1383)]"
      ]
     },
     "execution_count": 68,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "num_bins_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(28.0, 34.0)"
      ]
     },
     "execution_count": 69,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "num_bins_[1][0],num_bins_[2][1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {},
   "outputs": [],
   "source": [
    "num_bins_[1:3] = [(\n",
    "            num_bins_[1][0],\n",
    "            num_bins_[2][1],\n",
    "            num_bins_[1][2]+num_bins_[2][2],\n",
    "            num_bins_[1][3]+num_bins_[2][3])]\n",
    "#合并第二组和第三组"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "19"
      ]
     },
     "execution_count": 71,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(num_bins_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[(21.0, 28.0, 4243, 7548),\n",
       " (28.0, 34.0, 7646, 12680),\n",
       " (34.0, 36.0, 2908, 4610),\n",
       " (36.0, 39.0, 5182, 7474),\n",
       " (39.0, 41.0, 3956, 5832),\n",
       " (41.0, 43.0, 4002, 5694),\n",
       " (43.0, 45.0, 4389, 5958),\n",
       " (45.0, 46.0, 2419, 3278),\n",
       " (46.0, 48.0, 4813, 6164),\n",
       " (48.0, 50.0, 4900, 6223),\n",
       " (50.0, 52.0, 4728, 5831),\n",
       " (52.0, 54.0, 4681, 5015),\n",
       " (54.0, 56.0, 4677, 4015),\n",
       " (56.0, 58.0, 4483, 3404),\n",
       " (58.0, 61.0, 6583, 4829),\n",
       " (61.0, 64.0, 6968, 3182),\n",
       " (64.0, 68.0, 6623, 2291),\n",
       " (68.0, 74.0, 6753, 1906),\n",
       " (74.0, 107.0, 7737, 1383)]"
      ]
     },
     "execution_count": 72,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "num_bins_"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 通过IV值选择合适的箱子数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#通过IV值选择箱数\n",
    "IV = []\n",
    "axisx = []\n",
    " \n",
    "while len(num_bins_) > 2:#大于设置的最低分箱个数\n",
    "    pvs = []\n",
    "    #获取 num_bins_两两之间的卡方检验的置信度（或卡方值）\n",
    "    for i in range(len(num_bins_)-1):\n",
    "        x1 = num_bins_[i][2:]\n",
    "        x2 = num_bins_[i+1][2: ]\n",
    "        # 0 返回 chi2 值，1 返回 p 值。\n",
    "        pv = scipy.stats.chi2_contingency([x1,x2])[1]#p值\n",
    "        # chi2 = scipy.stats.chi2_contingency([x1,x2])[0]#计算卡方值\n",
    "        pvs.append(pv)\n",
    "        \n",
    "    # 通过 p 值进行处理。合并 p 值最大的两组\n",
    "    i = pvs.index(max(pvs))\n",
    "    num_bins_[i:i+2] = [(\n",
    "            num_bins_[i][0],\n",
    "            num_bins_[i+1][1],\n",
    "            num_bins_[i][2]+num_bins_[i+1][2],\n",
    "            num_bins_[i][3]+num_bins_[i+1][3])]\n",
    "    \n",
    "    bins_df = get_woe(num_bins_)#计算每次循环完得到箱子的WOE\n",
    "    axisx.append(len(num_bins_))#合并后箱的个数\n",
    "    IV.append(get_iv(bins_df))#计算每次循环完得到箱子的IV\n",
    "    \n",
    "plt.figure()\n",
    "plt.plot(axisx,IV)\n",
    "plt.xticks(axisx)\n",
    "plt.xlabel(\"number of box\")\n",
    "plt.ylabel(\"IV\")\n",
    "plt.show()\n",
    "#选择转折点处，也就是下坠最快的折线点，所以这里对于age来说选择箱数为6"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 将分箱过程定义成函数\n",
    "def get_bin(num_bins_,n):\n",
    "    while len(num_bins_) > n:\n",
    "        pvs = []\n",
    "        for i in range(len(num_bins_)-1):\n",
    "            x1 = num_bins_[i][2:]\n",
    "            x2 = num_bins_[i+1][2:]\n",
    "            pv = scipy.stats.chi2_contingency([x1,x2])[1]\n",
    "            # chi2 = scipy.stats.chi2_contingency([x1,x2])[0]\n",
    "            pvs.append(pv)\n",
    "\n",
    "        i = pvs.index(max(pvs))\n",
    "        num_bins_[i:i+2] = [(\n",
    "                num_bins_[i][0],\n",
    "                num_bins_[i+1][1],\n",
    "                num_bins_[i][2]+num_bins_[i+1][2],\n",
    "                num_bins_[i][3]+num_bins_[i+1][3])]\n",
    "    return num_bins_\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[(21.0, 36.0, 14797, 24838),\n",
       " (36.0, 54.0, 39070, 51469),\n",
       " (54.0, 61.0, 15743, 12248),\n",
       " (61.0, 64.0, 6968, 3182),\n",
       " (64.0, 74.0, 13376, 4197),\n",
       " (74.0, 107.0, 7737, 1383)]"
      ]
     },
     "execution_count": 75,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "afterbins = get_bin(num_bins,6)\n",
    "\n",
    "afterbins"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>min</th>\n",
       "      <th>max</th>\n",
       "      <th>count_0</th>\n",
       "      <th>count_1</th>\n",
       "      <th>total</th>\n",
       "      <th>percentage</th>\n",
       "      <th>bad_rate</th>\n",
       "      <th>good%</th>\n",
       "      <th>bad%</th>\n",
       "      <th>woe</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>21.0</td>\n",
       "      <td>36.0</td>\n",
       "      <td>14797</td>\n",
       "      <td>24838</td>\n",
       "      <td>39635</td>\n",
       "      <td>0.203248</td>\n",
       "      <td>0.626668</td>\n",
       "      <td>0.151467</td>\n",
       "      <td>0.255228</td>\n",
       "      <td>-0.521786</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>36.0</td>\n",
       "      <td>54.0</td>\n",
       "      <td>39070</td>\n",
       "      <td>51469</td>\n",
       "      <td>90539</td>\n",
       "      <td>0.464284</td>\n",
       "      <td>0.568473</td>\n",
       "      <td>0.399934</td>\n",
       "      <td>0.528880</td>\n",
       "      <td>-0.279461</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>54.0</td>\n",
       "      <td>61.0</td>\n",
       "      <td>15743</td>\n",
       "      <td>12248</td>\n",
       "      <td>27991</td>\n",
       "      <td>0.143538</td>\n",
       "      <td>0.437569</td>\n",
       "      <td>0.161151</td>\n",
       "      <td>0.125857</td>\n",
       "      <td>0.247197</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>61.0</td>\n",
       "      <td>64.0</td>\n",
       "      <td>6968</td>\n",
       "      <td>3182</td>\n",
       "      <td>10150</td>\n",
       "      <td>0.052049</td>\n",
       "      <td>0.313498</td>\n",
       "      <td>0.071327</td>\n",
       "      <td>0.032697</td>\n",
       "      <td>0.779983</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>64.0</td>\n",
       "      <td>74.0</td>\n",
       "      <td>13376</td>\n",
       "      <td>4197</td>\n",
       "      <td>17573</td>\n",
       "      <td>0.090114</td>\n",
       "      <td>0.238832</td>\n",
       "      <td>0.136922</td>\n",
       "      <td>0.043127</td>\n",
       "      <td>1.155256</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>74.0</td>\n",
       "      <td>107.0</td>\n",
       "      <td>7737</td>\n",
       "      <td>1383</td>\n",
       "      <td>9120</td>\n",
       "      <td>0.046767</td>\n",
       "      <td>0.151645</td>\n",
       "      <td>0.079199</td>\n",
       "      <td>0.014211</td>\n",
       "      <td>1.717923</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    min    max  count_0  count_1  total  percentage  bad_rate     good%  \\\n",
       "0  21.0   36.0    14797    24838  39635    0.203248  0.626668  0.151467   \n",
       "1  36.0   54.0    39070    51469  90539    0.464284  0.568473  0.399934   \n",
       "2  54.0   61.0    15743    12248  27991    0.143538  0.437569  0.161151   \n",
       "3  61.0   64.0     6968     3182  10150    0.052049  0.313498  0.071327   \n",
       "4  64.0   74.0    13376     4197  17573    0.090114  0.238832  0.136922   \n",
       "5  74.0  107.0     7737     1383   9120    0.046767  0.151645  0.079199   \n",
       "\n",
       "       bad%       woe  \n",
       "0  0.255228 -0.521786  \n",
       "1  0.528880 -0.279461  \n",
       "2  0.125857  0.247197  \n",
       "3  0.032697  0.779983  \n",
       "4  0.043127  1.155256  \n",
       "5  0.014211  1.717923  "
      ]
     },
     "execution_count": 76,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "bins_df = get_woe(num_bins)\n",
    "#查看最终分箱过后的WOE值\n",
    "\n",
    "bins_df\n",
    "#希望每组的bad_rate相差越大越好；\n",
    "# woe差异越大越好，应该具有单调性，随着箱的增加，要么由正到负，要么由负到正，只能有一个转折过程；\n",
    "# 如果woe值大小变化是有两个转折，比如呈现w型，证明分箱过程有问题\n",
    "# num_bins保留的信息越多越好"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 封装选取分箱个数的函数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "metadata": {},
   "outputs": [],
   "source": [
    "def graphforbestbin(DF, X, Y, n,q=20,graph=True):\n",
    "    '''\n",
    "    自动最优分箱函数，基于卡方检验的分箱\n",
    "\n",
    "    参数：\n",
    "    DF: 需要输入的数据\n",
    "    X: 需要分箱的列名\n",
    "    Y: 分箱数据对应的标签 Y 列名\n",
    "    n: 保留分箱个数\n",
    "    q: 初始分箱的个数\n",
    "    graph: 是否要画出IV图像\n",
    "\n",
    "    区间为前开后闭 (]\n",
    "\n",
    "    '''\n",
    "    \n",
    "    DF = DF[[X,Y]].copy()\n",
    "\n",
    "    DF[\"qcut\"],bins = pd.qcut(DF[X], retbins=True, q=q,duplicates=\"drop\")\n",
    "    coount_y0 = DF.loc[DF[Y]==0].groupby(by=\"qcut\").count()[Y]\n",
    "    coount_y1 = DF.loc[DF[Y]==1].groupby(by=\"qcut\").count()[Y]\n",
    "    num_bins = [*zip(bins,bins[1:],coount_y0,coount_y1)]\n",
    "\n",
    "    #判断每个箱子是否包含正负样本\n",
    "    for i in range(q):\n",
    "        if 0 in num_bins[0][2:]:\n",
    "            num_bins[0:2] = [(\n",
    "                num_bins[0][0],\n",
    "                num_bins[1][1],\n",
    "                num_bins[0][2]+num_bins[1][2],\n",
    "                num_bins[0][3]+num_bins[1][3])]\n",
    "            continue\n",
    "\n",
    "        for i in range(len(num_bins)):\n",
    "            if 0 in num_bins[i][2:]:\n",
    "                num_bins[i-1:i+1] = [(\n",
    "                    num_bins[i-1][0],\n",
    "                    num_bins[i][1],\n",
    "                    num_bins[i-1][2]+num_bins[i][2],\n",
    "                    num_bins[i-1][3]+num_bins[i][3])]\n",
    "                break\n",
    "        else:\n",
    "            break\n",
    "    \n",
    "    #定义WOE函数\n",
    "    def get_woe(num_bins):\n",
    "        columns = [\"min\",\"max\",\"count_0\",\"count_1\"]\n",
    "        df = pd.DataFrame(num_bins,columns=columns)\n",
    "        df[\"total\"] = df.count_0 + df.count_1\n",
    "        df[\"percentage\"] = df.total / df.total.sum()\n",
    "        df[\"bad_rate\"] = df.count_1 / df.total\n",
    "        df[\"good%\"] = df.count_0/df.count_0.sum()\n",
    "        df[\"bad%\"] = df.count_1/df.count_1.sum()\n",
    "        df[\"woe\"] = np.log(df[\"good%\"] / df[\"bad%\"])\n",
    "        return df\n",
    "    \n",
    "    #定义IV函数\n",
    "    def get_iv(df):\n",
    "        rate = df[\"good%\"] - df[\"bad%\"]\n",
    "        iv = np.sum(rate * df.woe)\n",
    "        return iv\n",
    "    \n",
    "    #找最合理的分箱数n\n",
    "    IV = []\n",
    "    axisx = []\n",
    "    while len(num_bins) > n:\n",
    "        pvs = []\n",
    "        for i in range(len(num_bins)-1):\n",
    "            x1 = num_bins[i][2:]\n",
    "            x2 = num_bins[i+1][2:]\n",
    "            pv = scipy.stats.chi2_contingency([x1,x2])[1]\n",
    "            pvs.append(pv)\n",
    "\n",
    "        i = pvs.index(max(pvs))\n",
    "        num_bins[i:i+2] = [(\n",
    "            num_bins[i][0],\n",
    "            num_bins[i+1][1],\n",
    "            num_bins[i][2]+num_bins[i+1][2],\n",
    "            num_bins[i][3]+num_bins[i+1][3])]\n",
    "\n",
    "       \n",
    "        bins_df = pd.DataFrame(get_woe(num_bins))\n",
    "        axisx.append(len(num_bins))\n",
    "        IV.append(get_iv(bins_df))\n",
    "        \n",
    "    if graph:\n",
    "        plt.figure()\n",
    "        plt.plot(axisx,IV)\n",
    "        plt.xticks(axisx)\n",
    "        plt.xlabel(\"number of box\")\n",
    "        plt.ylabel(\"IV\")\n",
    "        plt.show()\n",
    "    return bins_df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>SeriousDlqin2yrs</th>\n",
       "      <th>RevolvingUtilizationOfUnsecuredLines</th>\n",
       "      <th>age</th>\n",
       "      <th>NumberOfTime30-59DaysPastDueNotWorse</th>\n",
       "      <th>DebtRatio</th>\n",
       "      <th>MonthlyIncome</th>\n",
       "      <th>NumberOfOpenCreditLinesAndLoans</th>\n",
       "      <th>NumberOfTimes90DaysLate</th>\n",
       "      <th>NumberRealEstateLoansOrLines</th>\n",
       "      <th>NumberOfTime60-89DaysPastDueNotWorse</th>\n",
       "      <th>NumberOfDependents</th>\n",
       "      <th>qcut</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>0.015404</td>\n",
       "      <td>53</td>\n",
       "      <td>0</td>\n",
       "      <td>0.121802</td>\n",
       "      <td>4728.0</td>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>(52.0, 54.0]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0</td>\n",
       "      <td>0.168311</td>\n",
       "      <td>63</td>\n",
       "      <td>0</td>\n",
       "      <td>0.141964</td>\n",
       "      <td>1119.0</td>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>(61.0, 64.0]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>1.063570</td>\n",
       "      <td>39</td>\n",
       "      <td>1</td>\n",
       "      <td>0.417663</td>\n",
       "      <td>3500.0</td>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>3.716057</td>\n",
       "      <td>(36.0, 39.0]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0</td>\n",
       "      <td>0.088684</td>\n",
       "      <td>73</td>\n",
       "      <td>0</td>\n",
       "      <td>0.522822</td>\n",
       "      <td>5301.0</td>\n",
       "      <td>11</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>(68.0, 74.0]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1</td>\n",
       "      <td>0.622999</td>\n",
       "      <td>53</td>\n",
       "      <td>0</td>\n",
       "      <td>0.423650</td>\n",
       "      <td>13000.0</td>\n",
       "      <td>9</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>0.181999</td>\n",
       "      <td>(52.0, 54.0]</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   SeriousDlqin2yrs  RevolvingUtilizationOfUnsecuredLines  age  \\\n",
       "0                 0                              0.015404   53   \n",
       "1                 0                              0.168311   63   \n",
       "2                 1                              1.063570   39   \n",
       "3                 0                              0.088684   73   \n",
       "4                 1                              0.622999   53   \n",
       "\n",
       "   NumberOfTime30-59DaysPastDueNotWorse  DebtRatio  MonthlyIncome  \\\n",
       "0                                     0   0.121802         4728.0   \n",
       "1                                     0   0.141964         1119.0   \n",
       "2                                     1   0.417663         3500.0   \n",
       "3                                     0   0.522822         5301.0   \n",
       "4                                     0   0.423650        13000.0   \n",
       "\n",
       "   NumberOfOpenCreditLinesAndLoans  NumberOfTimes90DaysLate  \\\n",
       "0                                5                        0   \n",
       "1                                5                        0   \n",
       "2                                5                        1   \n",
       "3                               11                        0   \n",
       "4                                9                        0   \n",
       "\n",
       "   NumberRealEstateLoansOrLines  NumberOfTime60-89DaysPastDueNotWorse  \\\n",
       "0                             0                                     0   \n",
       "1                             0                                     0   \n",
       "2                             0                                     2   \n",
       "3                             2                                     0   \n",
       "4                             2                                     0   \n",
       "\n",
       "   NumberOfDependents          qcut  \n",
       "0            0.000000  (52.0, 54.0]  \n",
       "1            0.000000  (61.0, 64.0]  \n",
       "2            3.716057  (36.0, 39.0]  \n",
       "3            0.000000  (68.0, 74.0]  \n",
       "4            0.181999  (52.0, 54.0]  "
      ]
     },
     "execution_count": 78,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model_data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Index(['SeriousDlqin2yrs', 'RevolvingUtilizationOfUnsecuredLines', 'age',\n",
       "       'NumberOfTime30-59DaysPastDueNotWorse', 'DebtRatio', 'MonthlyIncome',\n",
       "       'NumberOfOpenCreditLinesAndLoans', 'NumberOfTimes90DaysLate',\n",
       "       'NumberRealEstateLoansOrLines', 'NumberOfTime60-89DaysPastDueNotWorse',\n",
       "       'NumberOfDependents', 'qcut'],\n",
       "      dtype='object')"
      ]
     },
     "execution_count": 79,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model_data.columns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "RevolvingUtilizationOfUnsecuredLines\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYgAAAEGCAYAAAB/+QKOAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nO3deZxcZZ3v8c+vekknnX3fF0IgYQlbGxQUZAsBnSCKVxBHFL25emVUvIyCqCiMw6Iz6r06ImpGnRFQEJioYRURHATSYckKdGeBdJbuzkLSnU56q9/945xOKk11d6rSp09V9ff9Sr3qnOec56lfd6rPr845Tz2PuTsiIiKdJeIOQEREcpMShIiIpKUEISIiaSlBiIhIWkoQIiKSVnHcAfSm0aNH+/Tp0+MOQ0Qkbyxfvny7u49Jt62gEsT06dOprKyMOwwRkbxhZm90tU2XmEREJC0lCBERSUsJQkRE0lKCEBGRtJQgREQkLSUIERFJSwlCRETSKqjvQYhI4WlPOs1t7exvTdLc1k5za5LmtiRJd5LudMxY0LHsKcvgJJ2g3MNlwv3C5WS4zVO2JVP2P6SNNPsnk6mvHWxP+sH9ksmDZZ33cYdk8CKkTrzQ8TN5SunBsrfvOGhAMZ85e2av/+6VIEQKhLvT0p6kpS04gLZ0PFLKku60J4MDa8eBrd09PJBxYLk9yYEDcLLTtrZkcNBrSwZttSeDNtrbw+dk9/u0JYM497e209yWpLm1nf3hc0tbSnm43JbUnDXdMYPRgwcoQYjkAnc/cABrDg9m+1sPfsJN99zSFhzoWtud1vYkbe1JWpMePB8oc1qTwXpHeVsySWvKPs2tBw/4qQf/juVckDAoSljwMDu4nEhQlIDiRIIBxQlKixMMKCmirDjBsIElDBgygLKSIgYUB9sPLhdRVhKUDSgJlkuLikgYmBlmkDDD4MAywb+g3MAwEgYcsq+FbYTtpJYR1uuomzjYRuf9i+zgvgmz8HGwrY4ySxyMKZEadxgrYXsdDpYd/N2mbu8LShDSL7W2J9nV1MKuva3s3NvCrqYWduxtYdfeFnaGj11NwXPD/rYDB/qOT7e9oaTIKE4kKCkySooSFIfrpcUJihNGcVHKtoQxeEAxIweFB9bwAFtaHBwsO5YHFCcoLUocup5SVpxIBAetRHCQKkocPMglLDgQJsKDeurBrShx8IBWnDASiU7PYXmwX98exCQ6ShBSkBqb23jqtTpW1uxOmwD27G/rsu6QsmJGlpcysryU8UPLmDW2mLKSooOfaMPnsgyeS4uDBFASJgQdSCUfKEFIwdi1t4Un1tby6OptPF21nZa2JKXFCUaVlzJiUHDAnzxiUMp6CSPLBzCivORAQhg+sJTSYnXuEwElCMlzdXv28+iaWh5ZtZXn1u+kPelMHFbGladPZcHx46mYPpKihD6pi2RDCULyzqadTTyyahuPrN7Gi2/uwh2OGl3O/zrrKBacMJ4TJw3T5RuRXqAEIXmhuq6Bh1cGSWH1lj0AHDdhKNeefwwLThjPrLGDlRREepkShOSkZNJZvWUPj6zeyiOrtrGufi8Ap00bwY0Xz+HC48czddSgmKMUKWxKEBK75rZ2qmobWbNlD6u37GbN1j2s3dpAY3MbRQnjnUeN5BNnTGf+8eMZN7Qs7nBF+g0lCOlTu5taWbN1D2u2hslgyx6q6xoPfFu2vLSIOROG8sFTJ3HS5OGcO3ssI8pLY45apH9SgpBIuDtbdu9nzZY9h5wZ1Ozad2CfMUMGcPzEoZw7eyzHTxzGcROHMm3kIBLqdSSSE5Qg5Ijta2mnqq6BV7c2sHbbngPPbzW1AsFQATNGlXPylOF89PSpHD9xGHMmDGHsEF0uEsllShBy2Nydml37eHVbA69u3cOr24JEsHH7XjrGUxtYUsSx44ew4PjxHD9xKMdNHMrs8UMpH6C3mki+ieyv1swWA+8H6tz9hDTb3wv8F7AhLHrA3W8Oty0AfgAUAT9z99uiilPSa9jfyuu1Dazd2sCr4VnBa9saaGg+OETFtFGDmD1+CH83dyJzJgxh9vihTNUlIpGCEeXHul8APwR+1c0+z7j7+1MLzKwI+BFwAVADLDOzJe6+JqpA5aBVm3fz+XteYv32vQfKhpQVM2f8UC49dRKzxw9l9oQhHDNuCIN1ViBS0CL7C3f3p81sehZV5wHV7r4ewMzuBS4BlCAi1tqe5Lr7XqGhuY1/vPBYZo8fwuwJQ5k4rExfQhPph+L+CPguM3sF2AJc5+6rgUnAppR9aoDT4wiuv1n81w28uq2BOz92GgtOGB93OCISszgTxIvANHdvNLOLgYeAWRycJyNVl1NKmdkiYBHA1KlTo4izX9i0s4nvPfE6Fxw3TslBRACIbVxjd9/j7o3h8lKgxMxGE5wxTEnZdTLBGUZX7dzl7hXuXjFmzJhIYy5U7s7XHlpFkRnfWnh83OGISI6ILUGY2XgLL2yb2bwwlh3AMmCWmc0ws1LgcmBJXHH2B39YsZW/vF7P/5l/LBOHD4w7HBHJEVF2c70HeC8w2sxqgJuAEgB3vxO4DPismbUB+4DL3d2BNjO7BniUoJvr4vDehERgd1Mr3/r9Gk6cNIyrzpgedzgikkOi7MV0RQ/bf0jQDTbdtqXA0ijikkPd/uir7NzbzC8++Q5NrCMih9Dciv1Y5cad3P38m1x95gxOmDQs7nBEJMcoQfRTLW1JbnhgJZOGD+TaC46JOxwRyUFxfw9CYvLTZ9ZTVdfIz6+q0DhJIpKWziD6oY3b9/KDP1Vx8YnjOW/OuLjDEZEcpQTRz7g7Nz60kgFFCW76O33nQUS6pgTRzzz08mb+u3oHX15wrKbvFJFuKUH0I7v2tnDLH9Zy8pThXHn6tLjDEZEcpwTRj9z68Fr27Gvl1g+eqDkbRKRHShD9xHPrd/Dbyho+/Z6jmDNhaNzhiEgeUILoB5rb2vnqgyuZMnIgXzhvVtzhiEieUAf4fuDHT61jff1efnn1PAaWFsUdjojkCZ1BFLjqukb+7c/rWHjSRM4+RsOhi8jhU4IoYO7OjQ+upKwkwdfff1zc4YhInlGCKGD3La/h+Q07ueHiOYwZMiDucEQkzyhBFKgdjc3889K1vGP6CD5SMaXnCiIinShBFKhv/3Ete5vb+OdL9Z0HEcmOEkQB+mvVdh54aTOfOXsms8YNiTscEclTShAFZn9rOzc+tJLpowbxuXOOjjscEclj+h5Egfnhk9W8saOJX3/6dMpK9J0HEcmeziAKyGvbGvjJ0+v44KmTOPPo0XGHIyJ5TgmiQLS1J7nuvlcYWlbCjRfPiTscESkAusRUIO56Zj0rN+/mRx89lVGD9Z0HETlykZ1BmNliM6szs1VdbL/SzFaEj2fN7KSUbRvNbKWZvWxmlVHFWCiqahv4/uNVXHTCeN43d0Lc4YhIgYjyEtMvgAXdbN8AnO3uc4FbgLs6bT/H3U9294qI4isI7UnnH+9fQfmAIm6+5IS4wxGRAhLZJSZ3f9rMpnez/dmU1eeAyVHFUsh+/tf1vLzpLX5w+ckaTkNEelWu3KT+FPBwyroDj5nZcjNb1F1FM1tkZpVmVllfXx9pkLlmXX0j333sdeYfN46FJ02MOxwRKTCx36Q2s3MIEsS7U4rPdPctZjYWeNzMXnX3p9PVd/e7CC9PVVRUeOQB54j2pPPl+1cwsKSIf7r0BMw0nIaI9K5YzyDMbC7wM+ASd9/RUe7uW8LnOuBBYF48Eeauf//vDSx/Yxc3/d1xjB1SFnc4IlKAYksQZjYVeAD4e3d/PaW83MyGdCwD84G0PaH6qw3b9/Ldx17jvNljufSUSXGHIyIFKrJLTGZ2D/BeYLSZ1QA3ASUA7n4n8A1gFPBv4eWRtrDH0jjgwbCsGLjb3R+JKs58k0w6X7l/BSVFCb596Ym6tCQikYmyF9MVPWz/NPDpNOXrgZPeXkMAfvW3jbywcSffuWwu44fp0pKIRCdXejHJYXhzRxO3P/Ia7z12DJedpl7BIhItJYg8kUw6X/7dKxQljH/WpSUR6QNKEHni1y+8yXPrd/K1981h4vCBcYcjIv2AEkQe2LSziVuXruU9s0bzkXdofmkR6RtKEDnO3bnhgZUYcOsHdWlJRPqOEkSOu3fZJv5avZ0bLp7D5BGD4g5HRPoRJYgctvmtfXz7j2s5Y+YoPjpvatzhiEg/owSRozouLSXduf1Dc0kkdGlJRPqWEkSOuq+yhqdfr+crC2YzZaQuLYlI31OCyEFbd+/jlj+uYd6Mkfz9O6fFHY6I9FNKEDnG3fnqAytpbU9yhy4tiUiMlCByzAMvbubPr9Xz5QtnM310edzhiEg/pgSRQ+r27Odbv19NxbQRfOKM6XGHIyL9nBJEjnB3vvrgKprbktxxmS4tiUj8lCByxLr6vTyxtpbPnzeLo8YMjjscEREliFzxem0DAGcfMybmSEREAkoQOaKqthEzmKmzBxHJEUoQOaKqroEpIwYxsLQo7lBERAAliJxRXdfI0WN19iAiuUMJIge0tSdZv30vs5QgRCSHKEHkgE279tHSltQZhIjklEgThJktNrM6M1vVxXYzs/9rZtVmtsLMTk3ZdpWZVYWPq6KMM27VdY0AShAiklOiPoP4BbCgm+0XAbPCxyLgxwBmNhK4CTgdmAfcZGYjIo00RlV1QRdXJQgRySWRJgh3fxrY2c0ulwC/8sBzwHAzmwBcCDzu7jvdfRfwON0nmrxWXdvIhGFlDCkriTsUEZED4r4HMQnYlLJeE5Z1Vf42ZrbIzCrNrLK+vj6yQKNUpR5MIpKD4k4Q6QYc8m7K317ofpe7V7h7xZgx+fct5GTSWVevBCEiuSfuBFEDTElZnwxs6aa84GzZvY+mlnZmjR0SdygiIoeIO0EsAT4e9mZ6J7Db3bcCjwLzzWxEeHN6flhWcKrCHkyzxukMQkRyS3GUjZvZPcB7gdFmVkPQM6kEwN3vBJYCFwPVQBPwyXDbTjO7BVgWNnWzu3d3sztvrevo4qoxmEQkx0SaINz9ih62O/C5LrYtBhZHEVcuqaptZPTgUkaUl8YdiojIIeK+xNTvVdU16Aa1iOQkJYgYuTtVdY26QS0iOUkJIkb1Dc007G/TGYSI5CQliBgd6MGkBCEiOUgJIkZV4TSjR6uLq4jkICWIGFXXNzK0rJgxgwfEHYqIyNsoQcSoqraRWeOGYJZuZBERkXgpQcSouq5R9x9EJGcpQcRk594WduxtUQ8mEclZShAx0SxyIpLrlCBi0jGL3Kxx+pKciOQmJYiYVNU2Ul5axMRhZXGHIiKSlhJETNbVNzJz7GD1YBKRnNVtgjCz68xsSnf7SHaqajWLnIjktp7OICYBz5rZ02b2WTMb3RdBFbo9+1vZtme/BukTkZzWbYJw92uBqcDXgbnACjN72Mw+bmY6umWpWmMwiUge6PEehAf+4u6fJZgn+vvAtUBt1MEVKnVxFZF8cNgzypnZicDlwEeAHcBXowqq0FXXNVJanGDKyEFxhyIi0qVuE4SZzSJIClcA7cC9wHx3X98HsRWsqtoGZo4ZTFFCPZhEJHf1dAbxKHAP8BF3X9kH8fQL1fWNnDxlRNxhiIh0q9sE4e5H9VUg/UVTSxs1u/bx4dPUe1hEcltPl5gaAE+3ieD+9dAe6i8AfgAUAT9z99s6bf8ecE64OggY6+7Dw23tQMdZy5vuvrCHnyUvrK/fi7t6MIlI7uvpDCLrrqxmVgT8CLgAqAGWmdkSd1+T0v61Kfv/A3BKShP73P3kbF8/Vx0cg0kJQkRyW5RDbcwDqt19vbu3ENzgvqSb/a8guN9R0KrrGilOGNNGlccdiohIt6JMEJOATSnrNWHZ25jZNGAG8GRKcZmZVZrZc2b2ga5exMwWhftV1tfX90bckaqqbWT66HJKijQMlojktiiPUun6cKa7nwFBV9r73b09pWyqu1cAHwW+b2Yz01V097vcvcLdK8aMGXNkEfcBzSInIvkiygRRQ/DN6w6TgS1d7Hs5nS4vufuW8Hk98BSH3p/IS81t7byxs0nfoBaRvBBlglgGzDKzGWZWSpAElnTeycyOBUYAf0spG2FmA8Ll0cCZwJrOdfPNxu1NtCddCUJE8sJhD7WRKXdvM7NrCL5sVwQsdvfVZnYzUOnuHcniCuBed0+9/DQH+ImZJQmS2G2pvZ/y1YEeTBrFVUTyQGQJAsDdlwJLO5V9o9P6N9PUexY4McrY4lBV20jC4Kgx6sEkIrlPXWn6UHV9I1NGDqKspCjuUEREeqQE0Yeqa9WDSUTyhxJEH2lrT7J+eyNH6/6DiOQJJYg+8ubOJlrb1YNJRPKHEkQfqdI0oyKSZ5Qg+kjHNKMzlSBEJE8oQfSRqtoGJg0fyOABkfYsFhHpNUoQfaS6vlFnDyKSV5Qg+kAy6RqkT0TyjhJEH9j81j72tyaVIEQkryhB9IGOG9Tq4ioi+UQJog90DNKnBCEi+UQJog9U1TYyZsgAhg8qjTsUEZHDpgTRB6p0g1pE8pASRMTcnXV1jbq8JCJ5RwkiYrV7mmlobtMZhIjkHSWIiB28Qa1RXEUkvyhBRExdXEUkXylBRKyqrpHhg0oYPVg9mEQkvyhBRKxjFjkzizsUEZGMKEFErKquQfcfRCQvRZogzGyBmb1mZtVmdn2a7Z8ws3ozezl8fDpl21VmVhU+rooyzqjsaGxmV1Or7j+ISF6KbHICMysCfgRcANQAy8xsibuv6bTrb9z9mk51RwI3ARWAA8vDuruiijcKmkVORPJZlGcQ84Bqd1/v7i3AvcAlh1n3QuBxd98ZJoXHgQURxRmZAwlinBKEiOSfKBPEJGBTynpNWNbZh8xshZndb2ZTMqyLmS0ys0ozq6yvr++NuHvNurpGBg8oZvzQsrhDERHJWJQJIl23He+0/ntgurvPBZ4AfplB3aDQ/S53r3D3ijFjxmQdbBSq6hqYqR5MIpKnokwQNcCUlPXJwJbUHdx9h7s3h6s/BU473Lr5oKpWg/SJSP6KMkEsA2aZ2QwzKwUuB5ak7mBmE1JWFwJrw+VHgflmNsLMRgDzw7K8sXtfK3UNzUoQIpK3IuvF5O5tZnYNwYG9CFjs7qvN7Gag0t2XAJ83s4VAG7AT+ERYd6eZ3UKQZABudvedUcUaBQ2xISL5LrIEAeDuS4Glncq+kbJ8A3BDF3UXA4ujjC9K1eEgfbP0JTkRyVP6JnVEqmobKStJMGnEwLhDERHJihJERKrrG5k5ZjBFCfVgEpH8pAQRkapazSInIvlNCSICe5vb2PzWPvVgEpG8pgQRgXX1HT2YdINaRPKXEkQE1MVVRAqBEkQEquoaKSkypo0aFHcoIiJZU4KIQFVtIzNGl1NSpF+viOQvHcEisK6+UV+QE5G8pwTRy/a3tvPGjr3M1P0HEclzShC9bMP2vSRds8iJSP5TguhlmkVORAqFEkQvq65rJGEwY3R53KGIiBwRJYheVl3XwLRR5QwoLoo7FBGRI6IE0cs0BpOIFAoliF7U2p5k4469ukEtIgVBCaIXvbGjidZ21xmEiBQEJYhepFnkRKSQKEH0oqraoIvrzLHqwSQi+U8JohdV1zcyafhABpVGOtW3iEifUILoRVW1jfqCnIgUjEgThJktMLPXzKzazK5Ps/1LZrbGzFaY2Z/MbFrKtnYzezl8LIkyzt7QnvRwkD4lCBEpDJFdCzGzIuBHwAVADbDMzJa4+5qU3V4CKty9ycw+C9wBfCTcts/dT44qvt62edc+mtuSukEtIgUjyjOIeUC1u6939xbgXuCS1B3c/c/u3hSuPgdMjjCeSFWFPZg0iquIFIooE8QkYFPKek1Y1pVPAQ+nrJeZWaWZPWdmH+iqkpktCverrK+vP7KIj0CVphkVkQITZXcbS1PmaXc0+xhQAZydUjzV3beY2VHAk2a20t3Xva1B97uAuwAqKirStt8XqmobGTd0AMMGlsQVgohIr4ryDKIGmJKyPhnY0nknMzsfuBFY6O7NHeXuviV8Xg88BZwSYaxHrLpeYzCJSGGJMkEsA2aZ2QwzKwUuBw7pjWRmpwA/IUgOdSnlI8xsQLg8GjgTSL25nVOSSWddnaYZFZHCEtklJndvM7NrgEeBImCxu682s5uBSndfAnwHGAzcZ2YAb7r7QmAO8BMzSxIksds69X7KKb9+4U0am9t4x/SRcYciItJrIv3Kr7svBZZ2KvtGyvL5XdR7Fjgxyth6S82uJm5bupb3zBrNxSeOjzscEZFeo29SHwF354YHVgJw6wdPJDwLEhEpCEoQR+C+5TU8U7Wd6y+azeQRg+IOR0SkVylBZKl2z35u+cMa5s0YyZWnT+u5gohInlGCyIK7c+ODK2ltT3LHh+aSSOjSkogUHiWILCx5ZQtPrK3juvnHMn205n4QkcKkBJGh+oZmblqymlOmDueTZ86IOxwRkcgoQWTom0tW09Tczncum0uRLi2JSAFTgsjAwyu38seVW/nC+bM4Wt+aFpECpwRxmHbtbeHr/7WKEyYNZdFZR8UdjohI5DR58mG6+Q9reKuplV9dfTolRcqrIlL4dKQ7DH9aW8uDL23mc+cczXETh8YdjohIn1CC6MHufa189cGVHDtuCJ875+i4wxER6TO6xNSDW5eupb6hmZ9+vILSYuVTEek/dMTrxjNV9dy7bBOLzprJ3MnD4w5HRKRPKUF0obG5jet/t5KjxpTzxfNnxR2OiEif0yWmLtzxyKts2b2P+z/zLspKiuIOR0Skz+kMIo3n1+/gV397g0+eMYPTpmmWOBHpn5QgOtnX0s5XfreCqSMHcd2Fx8QdjohIbHSJqZN/ffw1Nu5o4u7/eTqDSvXrEZH+S2cQKV58cxc//+sGrjx9KmfMHB13OCIisVKCCO1vbefL969g/NAyrr9odtzhiIjELtIEYWYLzOw1M6s2s+vTbB9gZr8Jtz9vZtNTtt0Qlr9mZhdGGSfA/3uyiuq6Rm790FyGlJVE/XIiIjkvsgRhZkXAj4CLgOOAK8zsuE67fQrY5e5HA98Dbg/rHgdcDhwPLAD+LWwvEqs27+bOv6znw6dN5uxjxkT1MiIieSXKM4h5QLW7r3f3FuBe4JJO+1wC/DJcvh84z8wsLL/X3ZvdfQNQHbbX61raklx33yuMKi/la+/rnL9ERPqvKLvpTAI2pazXAKd3tY+7t5nZbmBUWP5cp7qT0r2ImS0CFgFMnTo14yBb25OcMGkY848bx7BBurQkItIhygSRbj5OP8x9DqduUOh+F3AXQEVFRdp9ulM+oJjvfvikTKuJiBS8KC8x1QBTUtYnA1u62sfMioFhwM7DrCsiIhGKMkEsA2aZ2QwzKyW46byk0z5LgKvC5cuAJ93dw/LLw15OM4BZwAsRxioiIp1EdokpvKdwDfAoUAQsdvfVZnYzUOnuS4CfA/9hZtUEZw6Xh3VXm9lvgTVAG/A5d2+PKlYREXk7Cz6wF4aKigqvrKyMOwwRkbxhZsvdvSLdNn2TWkRE0lKCEBGRtJQgREQkLSUIERFJq6BuUptZPfBGltVHA9uPMIRCaSMXYlAbaiPqNnIhhlxoY5q7px2ErqASxJEws8qu7uT3tzZyIQa1oTaibiMXYsilNtLRJSYREUlLCUJERNJSgjjoLrWRUzGoDbURdRu5EEMutfE2ugchIiJp6QxCRETSUoIQEZG0+n2CMLPFZlZnZquyrD/FzP5sZmvNbLWZfSGLNsrM7AUzeyVs41vZxBK2VWRmL5nZH7Ksv9HMVprZy2aW1ciHZjbczO43s1fD38u7Mqx/bPj6HY89ZvbFLOK4Nvx9rjKze8ysLIs2vhDWX324MaR7T5nZSDN73MyqwucRWbTx4TCOpJn12KWxiza+E/6/rDCzB81seBZt3BLWf9nMHjOziZnUT9l2nZm5mY3OIoZvmtnmlPfIxZm2EZb/g5m9Fv5e78gijt+kxLDRzF7Ooo2Tzey5jr85M+t2euUu2jjJzP4W/u3+3syGdtfGYXP3fv0AzgJOBVZlWX8CcGq4PAR4HTguwzYMGBwulwDPA+/MMp4vAXcDf8iy/kZg9BH+Tn8JfDpcLgWGH0FbRcA2gi/zZFJvErABGBiu/xb4RIZtnACsAgYRDI3/BDArm/cUcAdwfbh8PXB7Fm3MAY4FngIqsoxjPlAcLt+eZRxDU5Y/D9yZSf2wfArBVABv9PR+6yKGbwLXZfB/ma6Nc8L/0wHh+thM2+i0/V+Ab2QRx2PAReHyxcBTWbSxDDg7XL4auCWT93pXj35/BuHuTxPMRZFt/a3u/mK43ACspYv5s7tpw929MVwtCR8Z9x4ws8nA+4CfZVq3t4SfXM4imOsDd29x97eOoMnzgHXuns035IuBgRbMVjiIzGclnAM85+5N7t4G/AW4tKdKXbynLiFInITPH8i0DXdf6+6vHWbsXbXxWPizQDDv++Qs2tiTslpON+/Vbv6+vgd8ubu6h9HGYeuijc8Ct7l7c7hPXbZxmJkB/wO4J4s2HOj4xD+MHt6nXbRxLPB0uPw48KHu2jhc/T5B9CYzmw6cQnAGkGndovD0tA543N0zbgP4PsEfXTKLuh0ceMzMlpvZoizqHwXUA/8eXur6mZmVH0E8l9PDH1067r4Z+C7wJrAV2O3uj2XYzCrgLDMbZWaDCD7dTemhTlfGufvWMLatwNgs2+lNVwMPZ1PRzL5tZpuAK4FvZFh3IbDZ3V/J5rVTXBNe6lrc0yW7LhwDvMfMnjezv5jZO44glvcAte5elUXdLwLfCX+f3wVuyKKNVcDCcPnDZP8+PYQSRC8xs8HA74AvdvqEdVjcvd3dTyb4RDfPzE7I8PXfD9S5+/JMX7uTM939VOAi4HNmdlaG9YsJTn9/7O6nAHsJLqlkzIKpahcC92VRdwTBp/YZwESg3Mw+lkkb7r6W4DLM48AjwCsEMxzmPTO7keBn+XU29d39RnefEta/JoPXHQTcSIZJJY0fAzOBkwk+APxLFm0UAyOAdwL/CPw2PBPIxhVk8UEm9Fng2vD3eS3h2XeGrib4e11OcKm7JctYDqEE0QvMrIQgOfza3R84krbCyzFPAQsyrHomsNDMNgL3Auea2UZZ1zgAAAU7SURBVH9m8fpbwuc64EGg2xtmadQANSlnQPcTJIxsXAS86O61WdQ9H9jg7vXu3go8AJyRaSPu/nN3P9XdzyI4rc/mEyJArZlNAAifu72cESUzuwp4P3Clhxetj8DdZHY5YyZB0n4lfK9OBl40s/GZvKi714YfqpLAT8n8fQrBe/WB8BLvCwRn3t3eME8nvIT5QeA3WcQAcBXB+xOCD0MZ/yzu/qq7z3f30wgS1bosYzmEEsQRCj9x/BxY6+7/mmUbYzp6k5jZQIKD26uZtOHuN7j7ZHefTnBZ5kl3z+gTs5mVm9mQjmWCG5oZ9e5y923AJjM7Niw6j2Bu8WwcyaeyN4F3mtmg8P/oPIL7Qxkxs7Hh81SCg0C28SwhOBAQPv9Xlu0cETNbAHwFWOjuTVm2MStldSEZvFfdfaW7j3X36eF7tYagk8e2DGOYkLJ6KRm+T0MPAeeG7R1D0KEimxFRzwdedfeaLOpCcM/h7HD5XLL4EJLyPk0AXwPuzDKWQ/XGne58fhD8wW8FWgnerJ/KsP67Ca7brwBeDh8XZ9jGXOClsI1V9NAT4jDaey9Z9GIiuH/wSvhYDdyY5eufDFSGP89DwIgs2hgE7ACGHcHv4VsEB69VwH8Q9lbJsI1nCBLcK8B52b6ngFHAnwj++P8EjMyijUvD5WagFng0izaqgU0p79UueyB108bvwt/pCuD3wKRM6nfavpGeezGli+E/gJVhDEuACVm0UQr8Z/izvAicm2kbYfkvgM8cwXvj3cDy8D32PHBaFm18gaAH5evAbYSjZBzpQ0NtiIhIWrrEJCIiaSlBiIhIWkoQIiKSlhKEiIikpQQhIiJpKUGIZMjMnrLDGE21F17n8xaMhvvrTuWfMLMfRv36IsVxByDSn5hZsR8cLK8n/5tglM8NUcYk0hWdQUhBMrPp4afvn4Zj/T8Wfkv9kDMAMxsdDvnQ8cn8oXA8/Q1mdo2ZfSkcdPA5MxuZ8hIfM7NnLZgrYl5YvzwcOG5ZWOeSlHbvM7PfEwzt3DnWL4XtrLJwzgkzu5Pgi4tLzOzaND/iFDN7xIK5DG7qoa13hIPalYUxrs50rC/pn3QGIYVsFnCFu/9PM/stwZhBPY1PdQLBiLxlBN86/oq7n2Jm3wM+TjBiLkC5u58RDma4OKx3I8EQJ1eHQ6e8YGZPhPu/C5jr7ocM02xmpwGfBE4nmBfkeTP7i7t/JhwW4xx3Tzf8w7zwNZuAZWb2R4Jv9Kdra5mZLQH+CRgI/Ke7ZzVBlvQvShBSyDa4e8cMX8uB6YdR588ezOvRYGa7CYaSgGBYh7kp+90Dwdj8ZjY0TAjzCQZMvC7cpwyYGi4/3jk5hN4NPOjuewHM7AGCoaNf6iHOx919R0qdjiFfumrrZoJJZfYTTPIj0iMlCClkzSnL7QSfniEY5rrj8mrnaUhT6yRT1pMc+vfSeYwaJ/jU/iHvNKmPmZ1OMOx5OtkOL93V63dlJDCYYDKqsm7iETlA9yCkP9oInBYuX5ZlGx8BMLN3E0xGtJtgCs1/6JhTwMxOOYx2ngY+EI46W04wIN8zh1HvAgvmuR5IMDvdf/fQ1l3A1wnmb7j9cH9I6d90BiH90XcJJof5e+DJLNvYZWbPEkwVeXVYdgvBPYoVYZLYSDDvQpfc/UUz+wXwQlj0M3fv6fISwF8JRjQ9Grjb3SsB0rVlZh8H2tz9bjMrAp41s3PdPdufXfoJjeYqIiJp6RKTiIikpQQhIiJpKUGIiEhaShAiIpKWEoSIiKSlBCEiImkpQYiISFr/H6c79YRQsYQeAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "age\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "NumberOfTime30-59DaysPastDueNotWorse\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "DebtRatio\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAY4AAAEICAYAAABI7RO5AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nO3de3xdZZ3v8c+3SZveSy8plF5oKUXuIoSijoKCSHUUvIDCMIIjcxg9w+jgwSOOIzrovF7iOAfPvIYjoqIOgogo2hnRchPEQaAtIG0tSFIKTW8JbSlN0yZN8jt/rJV2NyRN9m5W9iXf9+u1X3vttZ7nt5/V7uzfXms963kUEZiZmQ3UiGI3wMzMyosTh5mZ5cWJw8zM8uLEYWZmeXHiMDOzvDhxmJlZXjJNHJIWSXpOUr2ka3rZfoakJyV1SLogZ/3bJT2d89gt6X3ptu9LeiFn28lZ7oOZme1PWd3HIakK+BNwDtAILAUujog/5pSZC0wErgYWR8RdvcSZAtQDsyKiVdL3gf/qrWxfpk2bFnPnzi14X8zMhqPly5e/HBG1PddXZ/ieC4H6iFgDIOkO4Hxgb+KIiLXptq4DxLkA+FVEtBbakLlz57Js2bJCq5uZDUuSXuxtfZanqmYC63JeN6br8nUR8KMe6/5Z0jOSbpBUU2gDzcwsf1kmDvWyLq/zYpJmACcCS3JWfw44BjgNmAJ8to+6V0haJmlZc3NzPm9rZmYHkGXiaARm57yeBWzIM8aHgLsjYk/3iojYGIk24Hskp8ReIyJujoi6iKirrX3NKTozMytQloljKbBA0jxJo0hOOS3OM8bF9DhNlR6FIEnA+4CVg9BWMzMboMwSR0R0AFeSnGZaDdwZEaskXSfpPABJp0lqBC4EviVpVXf9tMfVbODhHqFvk7QCWAFMA76S1T6YmdlrZdYdt5TU1dWFe1WZmeVH0vKIqOu53neOm5lZXrK8j8PMSkhE0BXQFUFnVxABnRF0RRBdyfqutEx32SCtk5bvLhM94nWl9SF57i7bXS55vX/cvWVyypKzrftkyN4Y7FtHd5m9+5ZTLy3/mvWxfyxy9q9n/e7K+8Xvjslr27b/v3MSK/d1d9nc1+levGZd7v9Xb/X3X9dHmZyAl715LlPHD+5dC04cZkUQEbS2d7Jjdwc72ztobetkZ3sHO9s62NneSWtbBy1tHbS2d+7b3paWbe9MtqV1du/pIiKSJNB1gORQ+WelLYfSGyLOO3mmE4dZKdi9p5NXd+/h1V0d7Ni9hx27O9ixu4NXd+/Z//WuPby6e1+ZV9PnlrYOOrsG9k1eUz2CcTXVjB1VxbhR1YyrqWJ8TTXTJ9QwblQ1NSOrqBoBI6S9j72vR4gReu02SVTlbJNElWDEiGR5hEDkbu+Ol6zXfjGTLymlrwX7lesZj5y6SRwgJ2byKo2Z3g7W/SXYc91rXu8tq5zX2i9ebqzuNiinPL3EJCdOz3agnPb1Una/9vfYH3op01u53Lj7yvSI3VvQjDhx2LDU/Yt/+649+z1e7fm8u6PX7W0dBxolJ/kyHF9TzcQxI5kweiQTRldz+CGjOWb0BCaMrt67bsLokYyrSRLC2JruxJAkh7GjkmQxssqXIq20OHFYRerqCppb2li3tZXGbbv2PW9rZd22VjZt382ezr5/8UswoaaaSWNHMmlM8pg+Yfze5Yndj9HVTMxJAhPHpMlgVNWQ/gI0G0pOHFaWIoKtO9tZt20XjdtaWbc1SQqN23bRuLWVxld20d7jqKB2Qg2zJ4/hDbMnc/iJY5ickxS6k0H384SaakaM8Be/WW+cOKxsrNvayl3LG1myahMvbW2ltb1zv+2Tx45k9pSxHDNjAuccdyizpoxl1uQxzJ6cPI8eWVWklptVFicOK2k72zr41cpN/GTZOh5/YSsSnD5vCm+eP4fZU8Ywa/LYvc/ja/xxNhsK/kuzktPVFTyxdit3LW/knhUbaW3vZO7UsVz9zqN5/ymzmHnImGI30WxYc+KwkrFuays/e3I9P32ykZe2tjJuVBXvPelwLqibRd0Rk32x2axEOHFYUbW2d/DrlZu4a3kjjzZsAeDN86dy1TkLOPf4wxg7yh9Rs1Ljv0obchHBshe38ZNl6/jlMxvZ2d7JnClj+fQ5R/OBU2Yya/LYYjfRzA7AicOGTH1TC/es2MhPn2zkxS2tjB1VxZ+fOIMLTp3FwnlTfCrKrEw4cVhmIoIV67ezZNUmfr1yEw3NOwF445FT+ORZC1h0wmGMc08os7Ljv1obVB2dXSxdu40lqzZx76pNbNi+m6oR4vR5U7jszXM557hDmTHJvaLMypkThx203Xs6+e/6l1myahP3r25i6852aqpH8NYFtVx1ztG849hDmTxuVLGbaWaDxInDCtLS1sFvnm3i16s28dCzTexs72RCTTVnHTudc48/jDOPrvVpKLMK5b9sG7AtLW3cv3ozS1Zt5nfPv0x7ZxfTxo/ivJNncu7xh/Lm+dMYVe2RXM0qnROH9au+aQffengNP396PXs6g1mTx3Dpm47g3BMO45Q5k6nyYIBmw0qmiUPSIuD/AlXAdyLiqz22nwF8AzgJuCgi7srZ1gmsSF++FBHnpevnAXcAU4AngY9ERHuW+zFcPfnSNm56qIF7/7iZ0SNH8BcL5/Ch02Zz3IyJ7jprNoxlljgkVQE3AucAjcBSSYsj4o85xV4CPgpc3UuIXRFxci/rrwduiIg7JN0EXA58c1AbP4xFBA/9qZmbHmrg8Re2MmnMSD559gIue9MRgz79pJmVpyyPOBYC9RGxBkDSHcD5wN7EERFr020Hnk4tpeRn7lnAX6SrfgB8CSeOg9bR2cUvV2zkmw818OymHcyYNJovvOc4Ljptti9ym9l+svxGmAmsy3ndCJyeR/3RkpYBHcBXI+LnwFTglYjoyIk5czAaO1ztau/kzmXr+PYja2jctoujpo/n6xe+nvNef7gvdJtZr7JMHL2dBO97rs7XmhMRGyQdCTwoaQXw6kBjSroCuAJgzpw5ebzt8PBKazu3/v5FvvfoWrbubOeUOYfwxfcez9nHTPfMd2Z2QFkmjkZgds7rWcCGgVaOiA3p8xpJDwFvAH4KHCKpOj3q6DNmRNwM3AxQV1eXT8KqaBu37+I7j7zAj554idb2Ts46ZjofP3M+p831sOVmNjBZJo6lwIK0F9R64CL2XZs4IEmTgdaIaJM0Dfgz4GsREZJ+A1xA0rPqMuAXmbS+wqxpbuH/PdTAL55eT1fAea8/nL8580iOOWxisZtmZmUms8QRER2SrgSWkHTHvSUiVkm6DlgWEYslnQbcDUwG3ivpnyLieOBY4FvpRfMRJNc4ui+qfxa4Q9JXgKeA72a1D5Wisyu48Kbfs7O9g0tOP4LL3zKP2VM8dLmZFSbT7jIRcQ9wT4911+YsLyU53dSz3qPAiX3EXEPSY8sGaN3WVrbsbOf6D57Ih0/z9R4zOzjuNjMMNDS3AHDU9AlFbomZVQInjmGgvilNHLXji9wSM6sEThzDQENzC9PG1zBp7MhiN8XMKoATxzBQ39TCUdPHFbsZZlYhnDgqXETQ0LyT+T5NZWaDxImjwr3c0s72XXs4aroTh5kNDieOCtfdo8pHHGY2WJw4KtzeHlU+4jCzQeLEUeEamlsYO6qKGZNGF7spZlYhnDgqXH1TC/Nrx3sAQzMbNE4cFW5N807m17orrpkNHieOCrazrYP1r+zy9Q0zG1ROHBXshZd3Au5RZWaDy4mjgu0b3NCJw8wGjxNHBatvaqFqhDhiqq9xmNngceKoYA3NLRwxZSyjqv3fbGaDx98oFay+qYUjfX3DzAaZE0eF6ujsYu3Lrcz3qLhmNsicOCrUum27aO/s8uRNZjbonDgqVEM6RtV896gys0HmxFGh6j0qrpllJNPEIWmRpOck1Uu6ppftZ0h6UlKHpAty1p8s6feSVkl6RtKHc7Z9X9ILkp5OHydnuQ/lqqGphdoJNUwa4+lizWxwVWcVWFIVcCNwDtAILJW0OCL+mFPsJeCjwNU9qrcCl0bE85IOB5ZLWhIRr6TbPxMRd2XV9kpQ39zi6xtmloksjzgWAvURsSYi2oE7gPNzC0TE2oh4Bujqsf5PEfF8urwBaAJqM2xrRYkIGppa3KPKzDKRZeKYCazLed2YrsuLpIXAKKAhZ/U/p6ewbpBU00e9KyQtk7Ssubk537cta80tbby6u8NHHGaWiSwTR28TQEReAaQZwK3AX0VE91HJ54BjgNOAKcBne6sbETdHRF1E1NXWDq+DlYamdHBD96gyswxkmTgagdk5r2cBGwZaWdJE4JfAP0bEY93rI2JjJNqA75GcErMc9R7c0MwylGXiWAoskDRP0ijgImDxQCqm5e8G/iMiftJj24z0WcD7gJWD2uoK0NDUwrhRVRw20dPFmtngyyxxREQHcCWwBFgN3BkRqyRdJ+k8AEmnSWoELgS+JWlVWv1DwBnAR3vpdnubpBXACmAa8JWs9qFcNTS3MH+6p4s1s2xk1h0XICLuAe7pse7anOWlJKewetb7IfDDPmKeNcjNrDgNTS2cfuTUYjfDzCqU7xyvMDvbOtiwfbevb5hZZpw4Ksya5u7pYn0Ph5llw4mjwni6WDPLmhNHhemeLnbOFB9xmFk2nDgqjKeLNbOs+dulwtQ3tfiOcTPLlBNHBeno7GLtlp2eg8PMMuXEUUFe2trKns7whXEzy5QTRwVpcFdcMxsCThwVpN7zjJvZEHDiqCANzS1Mn1DDxNGeLtbMsuPEUUHqm1p8fcPMMufEUSEiIhkV1z2qzCxjThwVonlHGzt2d/iIw8wy58RRIbpn/fMRh5llzYmjQjQ0eXBDMxsaThwVoqF5J+Nrqjl0Yk2xm2JmFc6Jo0IkF8bHebpYM8ucE0eFqG9yjyozGxpOHBWgpa2Djdt3+45xMxsSmSYOSYskPSepXtI1vWw/Q9KTkjokXdBj22WSnk8fl+WsP1XSijTmv8nnZljjHlVmNoQySxySqoAbgXcBxwEXSzquR7GXgI8Ct/eoOwX4InA6sBD4oqTJ6eZvAlcAC9LHoox2oWzsmy7WgxuaWfayPOJYCNRHxJqIaAfuAM7PLRARayPiGaCrR91zgfsiYmtEbAPuAxZJmgFMjIjfR0QA/wG8L8N9KAv1TS1UjxBHTHXiMLPsZZk4ZgLrcl43pusOpu7MdLmQmBWroWknc6aOZWSVL1mZWfay/Kbp7dpDHGTdAceUdIWkZZKWNTc3D/Bty1N9cwtH+fqGmQ2RLBNHIzA75/UsYMNB1m1Ml/uNGRE3R0RdRNTV1tYOuNHlZk9nFy9u2ekeVWY2ZLJMHEuBBZLmSRoFXAQsHmDdJcA7JU1OL4q/E1gSERuBHZLemPamuhT4RRaNLxd7p4v1EYeZDZHMEkdEdABXkiSB1cCdEbFK0nWSzgOQdJqkRuBC4FuSVqV1twJfJkk+S4Hr0nUAnwC+A9QDDcCvstqHctDgWf/MbIhVZxk8Iu4B7umx7tqc5aXsf+opt9wtwC29rF8GnDC4LS1f+0bFdY8qMxsa7oZT5hqadnLoxBomeLpYMxsiThxlrr7Z08Wa2dBy4ihjEcEaD25oZkPMiaOMNe1oY0ebp4s1s6HlxFHG9vao8hGHmQ0hJ44ytm9wQycOMxs6ThxlrL6phfE11Uyf4OlizWzoOHGUsYbmZKgRT0liZkPJiaOMJdPF+sY/MxtaThxlqqWtg02v7vaFcTMbcgdMHJKuljT7QGWsOLp7VPnCuJkNtf6OOGYCj0r6raRPSJo2FI2y/jV4nnEzK5IDJo6IuAqYA3wBOAl4RtKvJF0qacJQNNB6t2+62LHFboqZDTP9XuOIxMMR8QmSyZW+AVwFbM66cda3huYWjvB0sWZWBAMeVl3SiSSTMX0Y2AL8Q1aNsv7VN3lwQzMrjgMmDkkLSJLFxUAncAfwzohYMwRtsz4k08W2cu7xhxW7KWY2DPV3xLEE+BHw4YhYMQTtsQF4cUsrHV3hIw4zK4oDJo6IOHKoGmID5x5VZlZM/Z2q2gFEb5tIrptPzKRVdkD1nmfczIqovyMOd7ktQQ3NLRw2cTTjazKdMt7MrFeZ9uWUtEjSc5LqJV3Ty/YaST9Otz8uaW66/hJJT+c8uiSdnG57KI3ZvW16lvtQihrco8rMiiizxCGpCrgReBdwHHCxpON6FLsc2BYRRwE3ANcDRMRtEXFyRJwMfARYGxFP59S7pHt7RDRltQ+lKCKSUXE9uKGZFUmWRxwLgfqIWBMR7SRdec/vUeZ84Afp8l3A2XrtGOEXk/TsMpLpYls8XayZFVGWiWMmsC7ndWO6rtcyEdEBbAem9ijzYV6bOL6Xnqb6Qi+JpqLVe7pYMyuyLBNHb1/oPXtoHbCMpNOB1ohYmbP9kog4EXhr+vhIr28uXSFpmaRlzc3N+bW8hHm6WDMrtiwTRyPJ2FbdZgEb+iojqRqYBGzN2X4RPY42ImJ9+rwDuJ3klNhrRMTNEVEXEXW1tbUHsRulpb6phQk11dR6ulgzK5IsE8dSYIGkeZJGkSSBxT3KLAYuS5cvAB6MiACQNAK4kOTaCOm66u6h3SWNBN4DrGQYaWhu4UhPF2tmRZTZjQAR0SHpSpJhS6qAWyJilaTrgGURsRj4LnCrpHqSI42LckKcATT2GBerBliSJo0q4H7g21ntQymqb2rhLUdVzhGUmZWfTO8gi4h7gHt6rLs2Z3k3yVFFb3UfAt7YY91O4NRBb2iZ2LF7D5tfbWP+dHfFNbPi8WQOZaSheScAR7lHlZkVkRNHGWnwGFVmVgKcOMpIfXMLI6vEnCmeLtbMiseJo4w0NLVwxNRxni7WzIrK30BlpL65xdc3zKzonDjKxJ7OLl7a0uoeVWZWdE4cZeLFLTs9XayZlQQnjjJR35R0xfXghmZWbE4cZcLzjJtZqXDiKBMNTS3MmDSacZ4u1syKzImjTDQ0e7pYMysNThxlYN90sU4cZlZ8ThxlYPOryXSxHmrEzEqBE0cZ2DddrO/hMLPic+IoA3uni/WpKjMrAU4cZaC+qYUJoz1drJmVBieOMtDQ3ML8Wk8Xa2alwYmjxHV1Bc9u2sECXxg3sxLhxFHinm58ha0723nLgmnFboqZGeDEUfIeWL2ZqhHibUdPL3ZTzMwAJ46S98DqJk6bO5lJY0cWuylmZkDGiUPSIknPSaqXdE0v22sk/Tjd/rikuen6uZJ2SXo6fdyUU+dUSSvSOv+mCr5i3LitlWc37eDsYw4tdlPMzPbKLHFIqgJuBN4FHAdcLOm4HsUuB7ZFxFHADcD1OdsaIuLk9PHxnPXfBK4AFqSPRVntQ7E9+GwTAGcf69NUZlY6sjziWAjUR8SaiGgH7gDO71HmfOAH6fJdwNkHOoKQNAOYGBG/j4gA/gN43+A3vTTcv7qJI6eN40jf+GdmJSTLxDETWJfzujFd12uZiOgAtgNT023zJD0l6WFJb80p39hPTAAkXSFpmaRlzc3NB7cnRdDS1sFjDVt8tGFmJSfLxNHbkUMMsMxGYE5EvAH4NHC7pIkDjJmsjLg5Iuoioq62tjaPZpeG3z3/Mu2dXZzl6xtmVmKyTByNwOyc17OADX2VkVQNTAK2RkRbRGwBiIjlQANwdFp+Vj8xK8IDqzczcXQ1dXMnF7spZmb7yTJxLAUWSJonaRRwEbC4R5nFwGXp8gXAgxERkmrTi+tIOpLkIviaiNgI7JD0xvRayKXALzLch6Lo6gp+81wTb3vddEZWuce0mZWWzOYhjYgOSVcCS4Aq4JaIWCXpOmBZRCwGvgvcKqke2EqSXADOAK6T1AF0Ah+PiK3ptk8A3wfGAL9KHxXl6cZXeLml3dc3zKwkZTqBdUTcA9zTY921Ocu7gQt7qfdT4Kd9xFwGnDC4LS0tD65u8t3iZlayfB6kBN2/ejN1R/hucTMrTU4cJab7bvF3HOveVGZWmpw4SozvFjezUufEUWIeWN3EPN8tbmYlzImjhOxs6+D3DVs4+xgfbZhZ6XLiKCGPpHeLn+3rG2ZWwpw4SojvFjezcuDEUSK67xY/03eLm1mJ8zdUifhDerf4O9ybysxKnBNHiXjAd4ubWZlw4igRvlvczMqFE0cJWP/KrmRucZ+mMrMy4MRRAh5cvRnA3XDNrCw4cZSA+9O7xef7bnEzKwNOHEXmu8XNrNw4cRTZ7+rTucV9fcPMyoQTR5E9sHozE0ZXc9rcKcVuipnZgDhxFFFXV/Dgs82eW9zMyoq/rYoouVu8zXeLm1lZceIoou67xc88urbYTTEzG7BME4ekRZKek1Qv6ZpettdI+nG6/XFJc9P150haLmlF+nxWTp2H0phPp4+y/bn+wLNNnHrEZA4ZO6rYTTEzG7DMEoekKuBG4F3AccDFko7rUexyYFtEHAXcAFyfrn8ZeG9EnAhcBtzao94lEXFy+mjKah+ytP6VXaze+KpPU5lZ2cnyiGMhUB8RayKiHbgDOL9HmfOBH6TLdwFnS1JEPBURG9L1q4DRkmoybOuQ893iZlauskwcM4F1Oa8b03W9lomIDmA7MLVHmQ8CT0VEW86676Wnqb4gSYPb7KFx/+om5k4dy5HTxhW7KWZmeckycfT2hR75lJF0PMnpq7/J2X5JegrrrenjI72+uXSFpGWSljU3N+fV8KztvVv82EMp07xnZsNYlomjEZid83oWsKGvMpKqgUnA1vT1LOBu4NKIaOiuEBHr0+cdwO0kp8ReIyJujoi6iKirrS2tXkvdd4t7NFwzK0dZJo6lwAJJ8ySNAi4CFvcos5jk4jfABcCDERGSDgF+CXwuIv67u7CkaknT0uWRwHuAlRnuQyZ8t7iZlbPMEkd6zeJKYAmwGrgzIlZJuk7SeWmx7wJTJdUDnwa6u+xeCRwFfKFHt9saYImkZ4CngfXAt7Pahyx03y1+5tG1vlvczMpSdZbBI+Ie4J4e667NWd4NXNhLva8AX+kj7KmD2cah9sz67end4u5NZWblyT95h9gDqzczQvC215XWdRczs4Fy4hhi969uou6IKb5b3MzKlhPHEOq+W9y9qcysnDlxDKEHn01GR/Hd4mZWzpw4htADqzczd+pY5tf6bnEzK19OHEOktb2DRxu2cNYxvlvczMqbE8cQeeT5l2nv6PJouGZW9pw4hsiDq5uSu8Xn+W5xMytvThxDoKsreODZJt8tbmYVwd9iQ6D7bnF3wzWzSuDEMQT23i1+tBOHmZU/J44h8EB6t/jkcb5b3MzKnxNHxja8sos/+m5xM6sgThwZe2Dv3eJOHGZWGZw4MvTsple57bEXOWLqWObXji92c8zMBkWm83EMV+u2tnLDfX/i7qfXM76mmq9+4CTfLW5mFcOJYxA172jjxt/Uc9vjLzJC4m/OmM/HzzzSQ6ibWUVx4hgEO3bv4duPvMB3HllDW0cXH6qbzafOXsBhk0YXu2lmZoPOieMg7N7TyQ8fe5Ebf1PPttY9/PlJM/hf5xzNkb6eYWYVzImjAJ1dwc+ebOQb9z/P+ld28dYF0/jMua/jpFmHFLtpZmaZy7RXlaRFkp6TVC/pml6210j6cbr9cUlzc7Z9Ll3/nKRzBxozSxHBvas2segbv+Uzdz3D1PGjuO2vT+fWy0930jCzYSOzIw5JVcCNwDlAI7BU0uKI+GNOscuBbRFxlKSLgOuBD0s6DrgIOB44HLhf0tFpnf5iZuKxNVu4/tfP8tRLr3Bk7Ti+eckpLDrhMPeWMrNhJ8tTVQuB+ohYAyDpDuB8IPdL/nzgS+nyXcC/K/kmPh+4IyLagBck1afxGEDMQbVqw3a+9uvnePhPzRw2cTRf/cCJXHDqLKo9yq2ZDVNZJo6ZwLqc143A6X2ViYgOSduBqen6x3rUnZku9xdz0HzuZyv40RMvMWnMSP7h3cdw6ZvmMnpkVVZvZ2ZWFrJMHL2dw4kBlulrfW8/83vGTAJLVwBXAMyZM6fvVh7AEVPH8rdvn88VZ8xn0piRBcUwM6s0WSaORmB2zutZwIY+yjRKqgYmAVv7qdtfTAAi4mbgZoC6urpek0t/Pn7m/EKqmZlVtCxP1C8FFkiaJ2kUycXuxT3KLAYuS5cvAB6MiEjXX5T2upoHLACeGGBMMzPLUGZHHOk1iyuBJUAVcEtErJJ0HbAsIhYD3wVuTS9+byVJBKTl7iS56N0B/G1EdAL0FjOrfTAzs9dS8gO/stXV1cWyZcuK3Qwzs7IiaXlE1PVc7z6lZmaWFycOMzPLixOHmZnlxYnDzMzy4sRhZmZ5GRa9qiQ1Ay8WWH0a8PJBNsExBjdGKbTBMRwj6xil0IYjIqK258phkTgOhqRlvXVHc4zixSiFNjiGY2QdoxTa0BefqjIzs7w4cZiZWV6cOPp3s2OUXIxSaINjOEbWMUqhDb3yNQ4zM8uLjzjMzCwvThx9kHSLpCZJKw8ixmxJv5G0WtIqSZ/Ks/5oSU9I+kNa/58Ooi1Vkp6S9F8F1l8raYWkpyUVNGKkpEMk3SXp2fTf5E151n9d+v7dj1cl/X0B7bgq/fdcKelHkkYXEONTaf1VA21Db58pSVMk3Sfp+fR5cgExLkzb0SWp3x40fcT4l/T/5RlJd0s6pIAYX07rPy3pXkmH5xsjZ9vVkkLStALa8SVJ63M+J+/Otw2S/k7Sc+m/69cKaMOPc95/raSnC4hxsqTHuv/mJC0sIMbrJf0+/dv9T0kTDxRjwCLCj14ewBnAKcDKg4gxAzglXZ4A/Ak4Lo/6AsanyyOBx4E3FtiWTwO3A/9VYP21wLSD/Df9AfDX6fIo4JCDiFUFbCLpZ55PvZnAC8CY9PWdwEfzjHECsBIYSzI1wf3AgkI+U8DXgGvS5WuA6wuIcSzwOuAhoK7AdrwTqE6Xry+wHRNzlj8J3JRvjHT9bJKpE17s7zPXRzu+BFw9wP/L3uq/Pf0/rUlfTy9kP3K2/ytwbQHtuBd4V7r8buChAmIsBc5Mlz8GfDmfz3pfDx9x9CEifksyR8jBxNgYEU+myzuA1eybO30g9SMiWtKXI9NH3helJM0C/hz4Tr51B0v6S+cMkjlYiIj2iHjlIEKeDTRERCE3dlYDY5TMOn3HYLEAAAdNSURBVDmWPmaRPIBjgcciojUiOoCHgff3V6mPz9T5JAmV9Pl9+caIiNUR8dwA295XjHvTfQF4jGR2zXxjvJrzchz9fFYP8Dd2A/C/+6vfT4wB6aP+J4CvRkRbWqap0DZIEvAh4EcFxAig+whhEv18TvuI8Trgt+nyfcAHDxRjoJw4hoikucAbSI4a8qlXlR7mNgH3RURe9VPfIPlD7CqgbrcA7pW0XMl87vk6EmgGvpeeMvuOpHEH0Z6L6OePsTcRsR74OvASsBHYHhH35hlmJXCGpKmSxpL8GpzdT52+HBoRG9O2bQSmFxhnMH0M+FUhFSX9s6R1wCXAtQXUPw9YHxF/KOT9c1yZnja7pb/Tf704GnirpMclPSzptINox1uBzRHxfAF1/x74l/Tf8+vA5wqIsRI4L12+kMI/p/tx4hgCksYDPwX+vsevsn5FRGdEnEzyC3ChpBPyfO/3AE0RsTyfer34s4g4BXgX8LeSzsizfjXJYfQ3I+INwE6SUzN5UzJt8HnATwqoO5nkV/484HBgnKS/zCdGRKwmOZ1zH/Br4A8kM1WWPUmfJ9mX2wqpHxGfj4jZaf0r83zvscDnKSDh9PBNYD5wMsmPg3/Ns341MBl4I/AZ4M70yKEQF1PAD5zUJ4Cr0n/Pq0iP1vP0MZK/1+Ukp8vbC2zLfpw4MiZpJEnSuC0iflZonPS0zkPAojyr/hlwnqS1wB3AWZJ+WMD7b0ifm4C7gQNeqOtFI9CYc8R0F0kiKcS7gCcjYnMBdd8BvBARzRGxB/gZ8OZ8g0TEdyPilIg4g+T0QCG/KAE2S5oBkD4f8LRIliRdBrwHuCTSk+IH4XbyPy0ynySh/yH9vM4CnpR0WD5BImJz+oOrC/g2hX1Wf5aeKn6C5Ej9gBfpe5OeCv0A8ON866YuI/l8QvIjKd/9ICKejYh3RsSpJAmsocC27MeJI0Ppr5TvAqsj4v8UUL+2u3eLpDEkX3rP5hMjIj4XEbMiYi7J6Z0HIyKvX9iSxkma0L1MciE1r95mEbEJWCfpdemqs0nmlC/EwfyKewl4o6Sx6f/P2STXnvIiaXr6PIfky6HQ9iwm+YIgff5FgXEOiqRFwGeB8yKitcAYC3Jenkf+n9UVETE9Iuamn9dGks4lm/Jsx4ycl+8nz88q8HPgrDTW0SQdOQoZKPAdwLMR0VhAXUiuaZyZLp9FAT9Ocj6nI4B/BG4qsC37G4wr7JX4IPki2AjsIfkAX15AjLeQXBt4Bng6fbw7j/onAU+l9VfST8+MAcR7GwX0qiK5PvGH9LEK+HyB738ysCzdn58DkwuIMRbYAkw6iH+HfyL5UlsJ3EraeybPGI+QJL4/AGcX+pkCpgIPkHwpPABMKSDG+9PlNmAzsKSAGPXAupzPaX89onqL8dP03/QZ4D+BmfnG6LF9Lf33quqtHbcCK9J2LAZm5Fl/FPDDdF+eBM4qZD+A7wMfP4jPxluA5eln7HHg1AJifIqkN+efgK+S3vR9sA/fOW5mZnnxqSozM8uLE4eZmeXFicPMzPLixGFmZnlx4jAzs7w4cZgNEkkPaQCj0w7C+3xSyejCt/VY/1FJ/571+5tVF7sBZpbcZRz7Bhnsz/8kGTX1hSzbZNYXH3HYsCJpbvpr/dvpXAv3pnfl73fEIGlaOuxF9y/5n6fzGbwg6UpJn04Ha3xM0pSct/hLSY8qmatjYVp/XDrY3tK0zvk5cX8i6T9JhtDu2dZPp3FWKp3zQ9JNJDdkLpZ0VS+7OFvSr5XMJfHFfmKdlg4EODpt46p8x0Kz4clHHDYcLQAujoj/IelOkjGV+hu/6wSS0Y1Hk9xl/dmIeIOkG4BLSUYgBhgXEW9OB4G8Ja33eZKhXj6WDiHzhKT70/JvAk6KiP2Gw5Z0KvBXwOkk87I8LunhiPh4OjzI2yOit2EwFqbv2QoslfRLktELeou1VNJi4CvAGOCHEVHwxGU2fDhx2HD0QkR0z8i2HJg7gDq/iWROlR2StpMMqQHJ0BYn5ZT7ESRzI0iamCaKd5IMNHl1WmY0MCddvq9n0ki9Bbg7InYCSPoZyRDdT/XTzvsiYktOne5hb/qKdR3JZD+7SSZfMuuXE4cNR205y50kv7YhGU68+/Rtz+lkc+t05bzuYv+/o55j+ATJr/wPRo/JliSdTjK8fG8KHca7r/fvyxRgPMkkYaMP0B6zvXyNw2yftcCp6fIFBcb4MICkt5BMErWdZBrUv+ue00HSGwYQ57fA+9JRfMeRDGT4yADqnaNkHvMxJLMJ/nc/sW4GvkAyf8b1A91JG958xGG2z9dJJu35CPBggTG2SXqUZMrPj6XrvkxyDeSZNHmsJZn3ok8R8aSk7wNPpKu+ExH9naYC+B3J6LBHAbdHxDKA3mJJuhToiIjbJVUBj0o6KyIK3XcbJjw6rpmZ5cWnqszMLC9OHGZmlhcnDjMzy4sTh5mZ5cWJw8zM8uLEYWZmeXHiMDOzvDhxmJlZXv4/qMkzh8ayWTEAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "MonthlyIncome\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "NumberOfOpenCreditLinesAndLoans\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "NumberOfTimes90DaysLate\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "NumberRealEstateLoansOrLines\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "NumberOfTime60-89DaysPastDueNotWorse\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "NumberOfDependents\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "for i in model_data.columns[1:-1]:\n",
    "    print(i)\n",
    "    graphforbestbin(model_data,i,\"SeriousDlqin2yrs\",n=1,q=20,graph=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 对所有的特征进行分箱选择\n",
    "出现分箱错误的特征，分成两个特征处理：\n",
    "\n",
    "auto_col_bins 连续型变量，可以用分箱函数\n",
    "\n",
    "hand_bins 类别型，手动分箱"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "metadata": {},
   "outputs": [],
   "source": [
    "#可以使用分箱的特征\n",
    "auto_col_bins = {\"RevolvingUtilizationOfUnsecuredLines\":5\n",
    "                 ,\n",
    "                \"age\":4,\n",
    "                \"DebtRatio\":4,\n",
    "                \"MonthlyIncome\":5,\n",
    "                \"NumberOfOpenCreditLinesAndLoans\":5}\n",
    " \n",
    "#不能使用自动分箱的变量\n",
    "hand_bins = {\"NumberOfTime30-59DaysPastDueNotWorse\":[0,1,2,13]\n",
    "            ,\"NumberOfTimes90DaysLate\":[0,1,2,17]\n",
    "            ,\"NumberRealEstateLoansOrLines\":[0,1,2,54]\n",
    "            ,\"NumberOfTime60-89DaysPastDueNotWorse\":[0,1,2,8]\n",
    "            ,\"NumberOfDependents\":[0,1,2,3]}\n",
    " \n",
    "#保证区间覆盖使用 np.inf替换最大值，用-np.inf替换最小值 \n",
    "#原因：比如一些新的值出现，例如家庭人数为30，以前没出现过，改成范围为极大值之后，这些新值就都能分到箱里边了\n",
    "hand_bins = {k:[-np.inf,*v[:-1],np.inf] for k,v in hand_bins.items()}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 82,
   "metadata": {},
   "outputs": [],
   "source": [
    "bins_of_col = {}\n",
    " \n",
    "# 生成自动分箱的分箱区间和分箱后的 WOE值\n",
    " \n",
    "for col in auto_col_bins:\n",
    "    bins_df = graphforbestbin(model_data,col\n",
    "                             ,\"SeriousDlqin2yrs\"\n",
    "                             ,n=auto_col_bins[col]\n",
    "                             #使用字典的性质来取出每个特征所对应的箱的数量\n",
    "                             ,q=20\n",
    "                             ,graph=False)\n",
    "    bins_list = sorted(set(bins_df[\"min\"]).union(bins_df[\"max\"]))\n",
    "    #保证区间覆盖使用 np.inf 替换最大值 -np.inf 替换最小值\n",
    "    bins_list[0],bins_list[-1] = -np.inf,np.inf\n",
    "    bins_of_col[col] = bins_list"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 83,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'RevolvingUtilizationOfUnsecuredLines': [-inf,\n",
       "  0.09912004375,\n",
       "  0.2978753766811289,\n",
       "  0.4650773834473624,\n",
       "  0.9999998999999999,\n",
       "  inf],\n",
       " 'age': [-inf, 36.0, 54.0, 61.0, 64.0, 74.0, inf],\n",
       " 'DebtRatio': [-inf, 0.01746292555, 0.5034989272, 1.4708718045227027, inf],\n",
       " 'MonthlyIncome': [-inf, 0.09663122054782981, 6900.0, inf],\n",
       " 'NumberOfOpenCreditLinesAndLoans': [-inf, 1.0, 3.0, 5.0, 17.0, inf],\n",
       " 'NumberOfTime30-59DaysPastDueNotWorse': [-inf, 0, 1, 2, inf],\n",
       " 'NumberOfTimes90DaysLate': [-inf, 0, 1, 2, inf],\n",
       " 'NumberRealEstateLoansOrLines': [-inf, 0, 1, 2, inf],\n",
       " 'NumberOfTime60-89DaysPastDueNotWorse': [-inf, 0, 1, 2, inf],\n",
       " 'NumberOfDependents': [-inf, 0, 1, 2, inf]}"
      ]
     },
     "execution_count": 83,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#合并手动分箱数据    \n",
    "bins_of_col.update(hand_bins)\n",
    "\n",
    "bins_of_col# 所有特征的分箱结果"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 开始分箱 箱内填充WOE值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 84,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>age</th>\n",
       "      <th>SeriousDlqin2yrs</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>53</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>63</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>39</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>73</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>53</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   age  SeriousDlqin2yrs\n",
       "0   53                 0\n",
       "1   63                 0\n",
       "2   39                 1\n",
       "3   73                 0\n",
       "4   53                 1"
      ]
     },
     "execution_count": 84,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data = model_data.copy()\n",
    " \n",
    "#函数pd.cut，可以根据已知的分箱间隔把数据分箱\n",
    "#参数为 pd.cut(数据，以列表表示的分箱间隔)\n",
    "\n",
    "data = data[[\"age\",\"SeriousDlqin2yrs\"]].copy()\n",
    "data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 85,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>age</th>\n",
       "      <th>SeriousDlqin2yrs</th>\n",
       "      <th>cut</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>53</td>\n",
       "      <td>0</td>\n",
       "      <td>(36.0, 54.0]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>63</td>\n",
       "      <td>0</td>\n",
       "      <td>(61.0, 64.0]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>39</td>\n",
       "      <td>1</td>\n",
       "      <td>(36.0, 54.0]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>73</td>\n",
       "      <td>0</td>\n",
       "      <td>(64.0, 74.0]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>53</td>\n",
       "      <td>1</td>\n",
       "      <td>(36.0, 54.0]</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   age  SeriousDlqin2yrs           cut\n",
       "0   53                 0  (36.0, 54.0]\n",
       "1   63                 0  (61.0, 64.0]\n",
       "2   39                 1  (36.0, 54.0]\n",
       "3   73                 0  (64.0, 74.0]\n",
       "4   53                 1  (36.0, 54.0]"
      ]
     },
     "execution_count": 85,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data[\"cut\"] = pd.cut(data[\"age\"],[-np.inf, 36.0, 54.0, 61.0, 64.0, 74.0, np.inf])\n",
    " \n",
    "data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "cut           SeriousDlqin2yrs\n",
       "(-inf, 36.0]  1                   24838\n",
       "              0                   14797\n",
       "(36.0, 54.0]  1                   51469\n",
       "              0                   39070\n",
       "(54.0, 61.0]  0                   15743\n",
       "              1                   12248\n",
       "(61.0, 64.0]  0                    6968\n",
       "              1                    3182\n",
       "(64.0, 74.0]  0                   13376\n",
       "              1                    4197\n",
       "(74.0, inf]   0                    7737\n",
       "              1                    1383\n",
       "Name: SeriousDlqin2yrs, dtype: int64"
      ]
     },
     "execution_count": 86,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#将数据按分箱结果聚合，并取出其中的标签值\n",
    "data.groupby(\"cut\")[\"SeriousDlqin2yrs\"].value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 87,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th>SeriousDlqin2yrs</th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>cut</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>(-inf, 36.0]</th>\n",
       "      <td>14797</td>\n",
       "      <td>24838</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>(36.0, 54.0]</th>\n",
       "      <td>39070</td>\n",
       "      <td>51469</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>(54.0, 61.0]</th>\n",
       "      <td>15743</td>\n",
       "      <td>12248</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>(61.0, 64.0]</th>\n",
       "      <td>6968</td>\n",
       "      <td>3182</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>(64.0, 74.0]</th>\n",
       "      <td>13376</td>\n",
       "      <td>4197</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>(74.0, inf]</th>\n",
       "      <td>7737</td>\n",
       "      <td>1383</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "SeriousDlqin2yrs      0      1\n",
       "cut                           \n",
       "(-inf, 36.0]      14797  24838\n",
       "(36.0, 54.0]      39070  51469\n",
       "(54.0, 61.0]      15743  12248\n",
       "(61.0, 64.0]       6968   3182\n",
       "(64.0, 74.0]      13376   4197\n",
       "(74.0, inf]        7737   1383"
      ]
     },
     "execution_count": 87,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#使用unstack()来将树状结构变成表状结构\n",
    "bins_df = data.groupby(\"cut\")[\"SeriousDlqin2yrs\"].value_counts().unstack()\n",
    "bins_df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 88,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th>SeriousDlqin2yrs</th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>woe</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>cut</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>(-inf, 36.0]</th>\n",
       "      <td>14797</td>\n",
       "      <td>24838</td>\n",
       "      <td>-0.521786</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>(36.0, 54.0]</th>\n",
       "      <td>39070</td>\n",
       "      <td>51469</td>\n",
       "      <td>-0.279461</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>(54.0, 61.0]</th>\n",
       "      <td>15743</td>\n",
       "      <td>12248</td>\n",
       "      <td>0.247197</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>(61.0, 64.0]</th>\n",
       "      <td>6968</td>\n",
       "      <td>3182</td>\n",
       "      <td>0.779983</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>(64.0, 74.0]</th>\n",
       "      <td>13376</td>\n",
       "      <td>4197</td>\n",
       "      <td>1.155256</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>(74.0, inf]</th>\n",
       "      <td>7737</td>\n",
       "      <td>1383</td>\n",
       "      <td>1.717923</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "SeriousDlqin2yrs      0      1       woe\n",
       "cut                                     \n",
       "(-inf, 36.0]      14797  24838 -0.521786\n",
       "(36.0, 54.0]      39070  51469 -0.279461\n",
       "(54.0, 61.0]      15743  12248  0.247197\n",
       "(61.0, 64.0]       6968   3182  0.779983\n",
       "(64.0, 74.0]      13376   4197  1.155256\n",
       "(74.0, inf]        7737   1383  1.717923"
      ]
     },
     "execution_count": 88,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "bins_df[\"woe\"] = np.log((bins_df[0]/bins_df[0].sum())/(bins_df[1]/bins_df[1].sum()))\n",
    "\n",
    "bins_df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 89,
   "metadata": {},
   "outputs": [],
   "source": [
    "#定义新的WOE函数\n",
    "# df 数据表\n",
    "#col 列名\n",
    "#y 标签\n",
    "#bins 箱子\n",
    "def get_woe(df,col,y,bins):\n",
    "    df = df[[col,y]].copy()\n",
    "    df[\"cut\"] = pd.cut(df[col],bins)\n",
    "    bins_df = df.groupby(\"cut\")[y].value_counts().unstack()\n",
    "    woe = bins_df[\"woe\"] = np.log((bins_df[0]/bins_df[0].sum())/(bins_df[1]/bins_df[1].sum()))\n",
    "    return woe"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 90,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'RevolvingUtilizationOfUnsecuredLines': cut\n",
       " (-inf, 0.0991]     2.204883\n",
       " (0.0991, 0.298]    0.667137\n",
       " (0.298, 0.465]    -0.128195\n",
       " (0.465, 1.0]      -0.946016\n",
       " (1.0, inf]        -2.033896\n",
       " dtype: float64,\n",
       " 'age': cut\n",
       " (-inf, 36.0]   -0.521786\n",
       " (36.0, 54.0]   -0.279461\n",
       " (54.0, 61.0]    0.247197\n",
       " (61.0, 64.0]    0.779983\n",
       " (64.0, 74.0]    1.155256\n",
       " (74.0, inf]     1.717923\n",
       " dtype: float64,\n",
       " 'DebtRatio': cut\n",
       " (-inf, 0.0175]     1.515419\n",
       " (0.0175, 0.503]   -0.010735\n",
       " (0.503, 1.471]    -0.473556\n",
       " (1.471, inf]       0.175609\n",
       " dtype: float64,\n",
       " 'MonthlyIncome': cut\n",
       " (-inf, 0.0966]      1.181873\n",
       " (0.0966, 6900.0]   -0.187832\n",
       " (6900.0, inf]       0.316407\n",
       " dtype: float64,\n",
       " 'NumberOfOpenCreditLinesAndLoans': cut\n",
       " (-inf, 1.0]   -0.840211\n",
       " (1.0, 3.0]    -0.331407\n",
       " (3.0, 5.0]    -0.054499\n",
       " (5.0, 17.0]    0.123240\n",
       " (17.0, inf]    0.462551\n",
       " dtype: float64,\n",
       " 'NumberOfTime30-59DaysPastDueNotWorse': cut\n",
       " (-inf, 0.0]    0.352863\n",
       " (0.0, 1.0]    -0.869930\n",
       " (1.0, 2.0]    -1.381058\n",
       " (2.0, inf]    -1.549291\n",
       " dtype: float64,\n",
       " 'NumberOfTimes90DaysLate': cut\n",
       " (-inf, 0.0]    0.234610\n",
       " (0.0, 1.0]    -1.754109\n",
       " (1.0, 2.0]    -2.250434\n",
       " (2.0, inf]    -2.406090\n",
       " dtype: float64,\n",
       " 'NumberRealEstateLoansOrLines': cut\n",
       " (-inf, 0.0]   -0.392646\n",
       " (0.0, 1.0]     0.193843\n",
       " (1.0, 2.0]     0.615183\n",
       " (2.0, inf]     0.263132\n",
       " dtype: float64,\n",
       " 'NumberOfTime60-89DaysPastDueNotWorse': cut\n",
       " (-inf, 0.0]    0.124813\n",
       " (0.0, 1.0]    -1.386015\n",
       " (1.0, 2.0]    -1.780098\n",
       " (2.0, inf]    -1.806485\n",
       " dtype: float64,\n",
       " 'NumberOfDependents': cut\n",
       " (-inf, 0.0]    0.626147\n",
       " (0.0, 1.0]    -0.582048\n",
       " (1.0, 2.0]    -0.527078\n",
       " (2.0, inf]    -0.475474\n",
       " dtype: float64}"
      ]
     },
     "execution_count": 90,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#将所有特征的WOE存储到字典当中\n",
    "woeall = {}\n",
    "for col in bins_of_col:\n",
    "    woeall[col] = get_woe(model_data,col,\"SeriousDlqin2yrs\",bins_of_col[col])\n",
    "    \n",
    "woeall"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 91,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>age</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>-0.279461</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.779983</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>-0.279461</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.155256</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>-0.279461</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        age\n",
       "0 -0.279461\n",
       "1  0.779983\n",
       "2 -0.279461\n",
       "3  1.155256\n",
       "4 -0.279461"
      ]
     },
     "execution_count": 91,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#不希望覆盖掉原本的数据，创建一个新的DataFrame，索引和原始数据model_data一模一样\n",
    "model_woe = pd.DataFrame(index=model_data.index)\n",
    " \n",
    "#将原数据分箱后，按箱的结果把WOE结构用map函数映射到数据中\n",
    "model_woe[\"age\"] = pd.cut(model_data[\"age\"],bins_of_col[\"age\"]).map(woeall[\"age\"])\n",
    "model_woe.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 得到最终特征矩阵"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 92,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>age</th>\n",
       "      <th>RevolvingUtilizationOfUnsecuredLines</th>\n",
       "      <th>DebtRatio</th>\n",
       "      <th>MonthlyIncome</th>\n",
       "      <th>NumberOfOpenCreditLinesAndLoans</th>\n",
       "      <th>NumberOfTime30-59DaysPastDueNotWorse</th>\n",
       "      <th>NumberOfTimes90DaysLate</th>\n",
       "      <th>NumberRealEstateLoansOrLines</th>\n",
       "      <th>NumberOfTime60-89DaysPastDueNotWorse</th>\n",
       "      <th>NumberOfDependents</th>\n",
       "      <th>SeriousDlqin2yrs</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>-0.279461</td>\n",
       "      <td>2.204883</td>\n",
       "      <td>-0.010735</td>\n",
       "      <td>-0.187832</td>\n",
       "      <td>-0.054499</td>\n",
       "      <td>0.352863</td>\n",
       "      <td>0.234610</td>\n",
       "      <td>-0.392646</td>\n",
       "      <td>0.124813</td>\n",
       "      <td>0.626147</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.779983</td>\n",
       "      <td>0.667137</td>\n",
       "      <td>-0.010735</td>\n",
       "      <td>-0.187832</td>\n",
       "      <td>-0.054499</td>\n",
       "      <td>0.352863</td>\n",
       "      <td>0.234610</td>\n",
       "      <td>-0.392646</td>\n",
       "      <td>0.124813</td>\n",
       "      <td>0.626147</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>-0.279461</td>\n",
       "      <td>-2.033896</td>\n",
       "      <td>-0.010735</td>\n",
       "      <td>-0.187832</td>\n",
       "      <td>-0.054499</td>\n",
       "      <td>-0.869930</td>\n",
       "      <td>-1.754109</td>\n",
       "      <td>-0.392646</td>\n",
       "      <td>-1.780098</td>\n",
       "      <td>-0.475474</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.155256</td>\n",
       "      <td>2.204883</td>\n",
       "      <td>-0.473556</td>\n",
       "      <td>-0.187832</td>\n",
       "      <td>0.123240</td>\n",
       "      <td>0.352863</td>\n",
       "      <td>0.234610</td>\n",
       "      <td>0.615183</td>\n",
       "      <td>0.124813</td>\n",
       "      <td>0.626147</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>-0.279461</td>\n",
       "      <td>-0.946016</td>\n",
       "      <td>-0.010735</td>\n",
       "      <td>0.316407</td>\n",
       "      <td>0.123240</td>\n",
       "      <td>0.352863</td>\n",
       "      <td>0.234610</td>\n",
       "      <td>0.615183</td>\n",
       "      <td>0.124813</td>\n",
       "      <td>-0.582048</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        age RevolvingUtilizationOfUnsecuredLines DebtRatio MonthlyIncome  \\\n",
       "0 -0.279461                             2.204883 -0.010735     -0.187832   \n",
       "1  0.779983                             0.667137 -0.010735     -0.187832   \n",
       "2 -0.279461                            -2.033896 -0.010735     -0.187832   \n",
       "3  1.155256                             2.204883 -0.473556     -0.187832   \n",
       "4 -0.279461                            -0.946016 -0.010735      0.316407   \n",
       "\n",
       "  NumberOfOpenCreditLinesAndLoans NumberOfTime30-59DaysPastDueNotWorse  \\\n",
       "0                       -0.054499                             0.352863   \n",
       "1                       -0.054499                             0.352863   \n",
       "2                       -0.054499                            -0.869930   \n",
       "3                        0.123240                             0.352863   \n",
       "4                        0.123240                             0.352863   \n",
       "\n",
       "  NumberOfTimes90DaysLate NumberRealEstateLoansOrLines  \\\n",
       "0                0.234610                    -0.392646   \n",
       "1                0.234610                    -0.392646   \n",
       "2               -1.754109                    -0.392646   \n",
       "3                0.234610                     0.615183   \n",
       "4                0.234610                     0.615183   \n",
       "\n",
       "  NumberOfTime60-89DaysPastDueNotWorse NumberOfDependents  SeriousDlqin2yrs  \n",
       "0                             0.124813           0.626147                 0  \n",
       "1                             0.124813           0.626147                 0  \n",
       "2                            -1.780098          -0.475474                 1  \n",
       "3                             0.124813           0.626147                 0  \n",
       "4                             0.124813          -0.582048                 1  "
      ]
     },
     "execution_count": 92,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#对所有特征操作可以写成：\n",
    "for col in bins_of_col:\n",
    "    model_woe[col] = pd.cut(model_data[col],bins_of_col[col]).map(woeall[col])\n",
    "    \n",
    "#将标签补充到数据中\n",
    "model_woe[\"SeriousDlqin2yrs\"] = model_data[\"SeriousDlqin2yrs\"]\n",
    " \n",
    "#这就是我们的建模数据了\n",
    "model_woe.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 处理测试集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 93,
   "metadata": {},
   "outputs": [],
   "source": [
    "vali_woe = pd.DataFrame(index=vali_data.index)\n",
    " \n",
    "for col in bins_of_col:\n",
    "    vali_woe[col] = pd.cut(vali_data[col],bins_of_col[col]).map(woeall[col])\n",
    "vali_woe[\"SeriousDlqin2yrs\"] = vali_data[\"SeriousDlqin2yrs\"]\n",
    " \n",
    "vali_X = vali_woe.iloc[:,:-1]\n",
    "vali_y = vali_woe.iloc[:,-1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 94,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>RevolvingUtilizationOfUnsecuredLines</th>\n",
       "      <th>age</th>\n",
       "      <th>DebtRatio</th>\n",
       "      <th>MonthlyIncome</th>\n",
       "      <th>NumberOfOpenCreditLinesAndLoans</th>\n",
       "      <th>NumberOfTime30-59DaysPastDueNotWorse</th>\n",
       "      <th>NumberOfTimes90DaysLate</th>\n",
       "      <th>NumberRealEstateLoansOrLines</th>\n",
       "      <th>NumberOfTime60-89DaysPastDueNotWorse</th>\n",
       "      <th>NumberOfDependents</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2.204883</td>\n",
       "      <td>0.247197</td>\n",
       "      <td>1.515419</td>\n",
       "      <td>-0.187832</td>\n",
       "      <td>-0.054499</td>\n",
       "      <td>0.352863</td>\n",
       "      <td>0.23461</td>\n",
       "      <td>-0.392646</td>\n",
       "      <td>0.124813</td>\n",
       "      <td>0.626147</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>-0.946016</td>\n",
       "      <td>-0.279461</td>\n",
       "      <td>-0.010735</td>\n",
       "      <td>0.316407</td>\n",
       "      <td>0.123240</td>\n",
       "      <td>0.352863</td>\n",
       "      <td>0.23461</td>\n",
       "      <td>0.615183</td>\n",
       "      <td>0.124813</td>\n",
       "      <td>-0.475474</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2.204883</td>\n",
       "      <td>0.779983</td>\n",
       "      <td>-0.010735</td>\n",
       "      <td>-0.187832</td>\n",
       "      <td>-0.054499</td>\n",
       "      <td>0.352863</td>\n",
       "      <td>0.23461</td>\n",
       "      <td>-0.392646</td>\n",
       "      <td>0.124813</td>\n",
       "      <td>0.626147</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2.204883</td>\n",
       "      <td>-0.279461</td>\n",
       "      <td>-0.010735</td>\n",
       "      <td>-0.187832</td>\n",
       "      <td>0.123240</td>\n",
       "      <td>0.352863</td>\n",
       "      <td>0.23461</td>\n",
       "      <td>0.193843</td>\n",
       "      <td>0.124813</td>\n",
       "      <td>0.626147</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>-0.946016</td>\n",
       "      <td>-0.279461</td>\n",
       "      <td>-0.010735</td>\n",
       "      <td>-0.187832</td>\n",
       "      <td>0.123240</td>\n",
       "      <td>0.352863</td>\n",
       "      <td>0.23461</td>\n",
       "      <td>-0.392646</td>\n",
       "      <td>0.124813</td>\n",
       "      <td>-0.582048</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  RevolvingUtilizationOfUnsecuredLines       age DebtRatio MonthlyIncome  \\\n",
       "0                             2.204883  0.247197  1.515419     -0.187832   \n",
       "1                            -0.946016 -0.279461 -0.010735      0.316407   \n",
       "2                             2.204883  0.779983 -0.010735     -0.187832   \n",
       "3                             2.204883 -0.279461 -0.010735     -0.187832   \n",
       "4                            -0.946016 -0.279461 -0.010735     -0.187832   \n",
       "\n",
       "  NumberOfOpenCreditLinesAndLoans NumberOfTime30-59DaysPastDueNotWorse  \\\n",
       "0                       -0.054499                             0.352863   \n",
       "1                        0.123240                             0.352863   \n",
       "2                       -0.054499                             0.352863   \n",
       "3                        0.123240                             0.352863   \n",
       "4                        0.123240                             0.352863   \n",
       "\n",
       "  NumberOfTimes90DaysLate NumberRealEstateLoansOrLines  \\\n",
       "0                 0.23461                    -0.392646   \n",
       "1                 0.23461                     0.615183   \n",
       "2                 0.23461                    -0.392646   \n",
       "3                 0.23461                     0.193843   \n",
       "4                 0.23461                    -0.392646   \n",
       "\n",
       "  NumberOfTime60-89DaysPastDueNotWorse NumberOfDependents  \n",
       "0                             0.124813           0.626147  \n",
       "1                             0.124813          -0.475474  \n",
       "2                             0.124813           0.626147  \n",
       "3                             0.124813           0.626147  \n",
       "4                             0.124813          -0.582048  "
      ]
     },
     "execution_count": 94,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "vali_X.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 建模"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 95,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>age</th>\n",
       "      <th>RevolvingUtilizationOfUnsecuredLines</th>\n",
       "      <th>DebtRatio</th>\n",
       "      <th>MonthlyIncome</th>\n",
       "      <th>NumberOfOpenCreditLinesAndLoans</th>\n",
       "      <th>NumberOfTime30-59DaysPastDueNotWorse</th>\n",
       "      <th>NumberOfTimes90DaysLate</th>\n",
       "      <th>NumberRealEstateLoansOrLines</th>\n",
       "      <th>NumberOfTime60-89DaysPastDueNotWorse</th>\n",
       "      <th>NumberOfDependents</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>-0.279461</td>\n",
       "      <td>2.204883</td>\n",
       "      <td>-0.010735</td>\n",
       "      <td>-0.187832</td>\n",
       "      <td>-0.054499</td>\n",
       "      <td>0.352863</td>\n",
       "      <td>0.234610</td>\n",
       "      <td>-0.392646</td>\n",
       "      <td>0.124813</td>\n",
       "      <td>0.626147</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.779983</td>\n",
       "      <td>0.667137</td>\n",
       "      <td>-0.010735</td>\n",
       "      <td>-0.187832</td>\n",
       "      <td>-0.054499</td>\n",
       "      <td>0.352863</td>\n",
       "      <td>0.234610</td>\n",
       "      <td>-0.392646</td>\n",
       "      <td>0.124813</td>\n",
       "      <td>0.626147</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>-0.279461</td>\n",
       "      <td>-2.033896</td>\n",
       "      <td>-0.010735</td>\n",
       "      <td>-0.187832</td>\n",
       "      <td>-0.054499</td>\n",
       "      <td>-0.869930</td>\n",
       "      <td>-1.754109</td>\n",
       "      <td>-0.392646</td>\n",
       "      <td>-1.780098</td>\n",
       "      <td>-0.475474</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.155256</td>\n",
       "      <td>2.204883</td>\n",
       "      <td>-0.473556</td>\n",
       "      <td>-0.187832</td>\n",
       "      <td>0.123240</td>\n",
       "      <td>0.352863</td>\n",
       "      <td>0.234610</td>\n",
       "      <td>0.615183</td>\n",
       "      <td>0.124813</td>\n",
       "      <td>0.626147</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>-0.279461</td>\n",
       "      <td>-0.946016</td>\n",
       "      <td>-0.010735</td>\n",
       "      <td>0.316407</td>\n",
       "      <td>0.123240</td>\n",
       "      <td>0.352863</td>\n",
       "      <td>0.234610</td>\n",
       "      <td>0.615183</td>\n",
       "      <td>0.124813</td>\n",
       "      <td>-0.582048</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>195003</th>\n",
       "      <td>-0.521786</td>\n",
       "      <td>-0.946016</td>\n",
       "      <td>-0.473556</td>\n",
       "      <td>-0.187832</td>\n",
       "      <td>0.123240</td>\n",
       "      <td>-1.381058</td>\n",
       "      <td>0.234610</td>\n",
       "      <td>0.193843</td>\n",
       "      <td>0.124813</td>\n",
       "      <td>-0.475474</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>195004</th>\n",
       "      <td>-0.279461</td>\n",
       "      <td>-0.946016</td>\n",
       "      <td>-0.010735</td>\n",
       "      <td>-0.187832</td>\n",
       "      <td>0.123240</td>\n",
       "      <td>-0.869930</td>\n",
       "      <td>0.234610</td>\n",
       "      <td>0.193843</td>\n",
       "      <td>0.124813</td>\n",
       "      <td>-0.527078</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>195005</th>\n",
       "      <td>-0.279461</td>\n",
       "      <td>-0.946016</td>\n",
       "      <td>-0.473556</td>\n",
       "      <td>0.316407</td>\n",
       "      <td>0.123240</td>\n",
       "      <td>0.352863</td>\n",
       "      <td>0.234610</td>\n",
       "      <td>0.193843</td>\n",
       "      <td>0.124813</td>\n",
       "      <td>-0.475474</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>195006</th>\n",
       "      <td>0.779983</td>\n",
       "      <td>-0.946016</td>\n",
       "      <td>-0.010735</td>\n",
       "      <td>0.316407</td>\n",
       "      <td>0.123240</td>\n",
       "      <td>0.352863</td>\n",
       "      <td>0.234610</td>\n",
       "      <td>0.263132</td>\n",
       "      <td>0.124813</td>\n",
       "      <td>0.626147</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>195007</th>\n",
       "      <td>-0.279461</td>\n",
       "      <td>-0.946016</td>\n",
       "      <td>0.175609</td>\n",
       "      <td>-0.187832</td>\n",
       "      <td>0.123240</td>\n",
       "      <td>0.352863</td>\n",
       "      <td>0.234610</td>\n",
       "      <td>0.193843</td>\n",
       "      <td>0.124813</td>\n",
       "      <td>0.626147</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>195008 rows × 10 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "             age RevolvingUtilizationOfUnsecuredLines DebtRatio MonthlyIncome  \\\n",
       "0      -0.279461                             2.204883 -0.010735     -0.187832   \n",
       "1       0.779983                             0.667137 -0.010735     -0.187832   \n",
       "2      -0.279461                            -2.033896 -0.010735     -0.187832   \n",
       "3       1.155256                             2.204883 -0.473556     -0.187832   \n",
       "4      -0.279461                            -0.946016 -0.010735      0.316407   \n",
       "...          ...                                  ...       ...           ...   \n",
       "195003 -0.521786                            -0.946016 -0.473556     -0.187832   \n",
       "195004 -0.279461                            -0.946016 -0.010735     -0.187832   \n",
       "195005 -0.279461                            -0.946016 -0.473556      0.316407   \n",
       "195006  0.779983                            -0.946016 -0.010735      0.316407   \n",
       "195007 -0.279461                            -0.946016  0.175609     -0.187832   \n",
       "\n",
       "       NumberOfOpenCreditLinesAndLoans NumberOfTime30-59DaysPastDueNotWorse  \\\n",
       "0                            -0.054499                             0.352863   \n",
       "1                            -0.054499                             0.352863   \n",
       "2                            -0.054499                            -0.869930   \n",
       "3                             0.123240                             0.352863   \n",
       "4                             0.123240                             0.352863   \n",
       "...                                ...                                  ...   \n",
       "195003                        0.123240                            -1.381058   \n",
       "195004                        0.123240                            -0.869930   \n",
       "195005                        0.123240                             0.352863   \n",
       "195006                        0.123240                             0.352863   \n",
       "195007                        0.123240                             0.352863   \n",
       "\n",
       "       NumberOfTimes90DaysLate NumberRealEstateLoansOrLines  \\\n",
       "0                     0.234610                    -0.392646   \n",
       "1                     0.234610                    -0.392646   \n",
       "2                    -1.754109                    -0.392646   \n",
       "3                     0.234610                     0.615183   \n",
       "4                     0.234610                     0.615183   \n",
       "...                        ...                          ...   \n",
       "195003                0.234610                     0.193843   \n",
       "195004                0.234610                     0.193843   \n",
       "195005                0.234610                     0.193843   \n",
       "195006                0.234610                     0.263132   \n",
       "195007                0.234610                     0.193843   \n",
       "\n",
       "       NumberOfTime60-89DaysPastDueNotWorse NumberOfDependents  \n",
       "0                                  0.124813           0.626147  \n",
       "1                                  0.124813           0.626147  \n",
       "2                                 -1.780098          -0.475474  \n",
       "3                                  0.124813           0.626147  \n",
       "4                                  0.124813          -0.582048  \n",
       "...                                     ...                ...  \n",
       "195003                             0.124813          -0.475474  \n",
       "195004                             0.124813          -0.527078  \n",
       "195005                             0.124813          -0.475474  \n",
       "195006                             0.124813           0.626147  \n",
       "195007                             0.124813           0.626147  \n",
       "\n",
       "[195008 rows x 10 columns]"
      ]
     },
     "execution_count": 95,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X = model_woe.iloc[:,:-1]\n",
    "y = model_woe.iloc[:,-1]\n",
    "X"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 96,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.7705202450464248"
      ]
     },
     "execution_count": 96,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.linear_model import LogisticRegression as LR\n",
    "\n",
    "lr = LR().fit(X,y)\n",
    "lr.score(vali_X,vali_y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 97,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\Apps\\anaconda\\lib\\site-packages\\sklearn\\svm\\_base.py:977: ConvergenceWarning: Liblinear failed to converge, increase the number of iterations.\n",
      "  \"the number of iterations.\", ConvergenceWarning)\n",
      "D:\\Apps\\anaconda\\lib\\site-packages\\sklearn\\svm\\_base.py:977: ConvergenceWarning: Liblinear failed to converge, increase the number of iterations.\n",
      "  \"the number of iterations.\", ConvergenceWarning)\n",
      "D:\\Apps\\anaconda\\lib\\site-packages\\sklearn\\svm\\_base.py:977: ConvergenceWarning: Liblinear failed to converge, increase the number of iterations.\n",
      "  \"the number of iterations.\", ConvergenceWarning)\n",
      "D:\\Apps\\anaconda\\lib\\site-packages\\sklearn\\svm\\_base.py:977: ConvergenceWarning: Liblinear failed to converge, increase the number of iterations.\n",
      "  \"the number of iterations.\", ConvergenceWarning)\n",
      "D:\\Apps\\anaconda\\lib\\site-packages\\sklearn\\svm\\_base.py:977: ConvergenceWarning: Liblinear failed to converge, increase the number of iterations.\n",
      "  \"the number of iterations.\", ConvergenceWarning)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "c_1 = np.linspace(0.01,1,20)\n",
    "c_2 = np.linspace(0.01,0.2,20)\n",
    " \n",
    "score = []\n",
    "for i in c_1: \n",
    "    lr = LR(solver='liblinear',C=i).fit(X,y)\n",
    "    score.append(lr.score(vali_X,vali_y))\n",
    "plt.figure()\n",
    "plt.plot(c_1,score)\n",
    "plt.show()\n",
    " \n",
    "lr.n_iter_#array([7], dtype=int32)\n",
    " \n",
    "score = []\n",
    "for i in [1,2,3,4,5,6]: \n",
    "    lr = LR(solver='liblinear',C=0.025,max_iter=i).fit(X,y)\n",
    "    score.append(lr.score(vali_X,vali_y))\n",
    "plt.figure()\n",
    "plt.plot([1,2,3,4,5,6],score)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 98,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x1c70e34e408>"
      ]
     },
     "execution_count": 98,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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5U+XSxQ5OTlQzbpfkc5PnDhxgvT0dAYPHszUqVPx8fGxOySXlZycTGBgIE2aNKlQPUalKjoRITU1leTk5FJdz8blEkVubi4EWfdre1ecWUQDBgzgp59+ol27dlrc7xplZGRoklDqKhhjqFWrFikpKaW6X5f7RMufKOp417E1lv/85z+sXLnS+bhDhw6aJEqJJgmlrk5Z/O24do/Cx54ehYgwbtw4JkyYQI0aNdi1axc1a9a0JRallCprLvf11+4eRW5uLo8//jgTJkzA09OTiRMnapJwQ56enkRHRxMeHk6/fv04efKk87WkpCS6du1Ks2bNuOmmm5gwYUKBa2XmzZtHmzZtaNGiBaGhoYwZM8aOH+GqDB48mMjISCZOnFii7atWrVomcYgIo0ePJiQkhMjISH799dcitzt37hxxcXHOC3Erovnz59O8eXNCQkJ45ZVXitxm//79dOnShZiYGCIjI/n+++8B2Lt3L/7+/kRHRxMdHc2f//xn53u6d+/OiRMnyuVnQERc6lalShXhZYTFyJw/5kh5On/+vNx7770CiK+vr8yePbtcj19ZbNmyxe4QpEqVKs77w4YNk3/+858iIpKeni7BwcGyYMECERE5e/as9OrVSyZNmiQiIps2bZLg4GDZunWriIhkZWXJ22+/XaqxZWVller+8hw+fFgaNWp0Re/J306lae7cudKrVy/Jzc2V1atXy80331zkdpMmTZI333yzxPvNzc2VnJyc0grzsrKzsyU4OFh+//13yczMlMjISElKSiq03ciRI+Wdd94REZGkpCRp3LixiIjs2bNHwsLCitz31KlTnb+XFyvqbwhYK1f5uetyPYqcnBxnnafynPWUnp7OHXfcwWeffUbVqlWZN28et99+e7kdv7IyxpTJ7Uq0a9eOgwcPAvDZZ5/RoUMHevToAUBAQACTJk1yflN89dVXeeGFFwgNDQXAy8uLUaNGFdpnWloa999/PxEREURGRvLVV18BBb+hz5w5kxEjRgAwYsQInn76abp06cIzzzxDkyZNCvRyQkJCOHr0KCkpKQwcOJDY2FhiY2MLnEPLk5GR4Tx2TEwMS5cuBaBHjx788ccfREdHs3z58gLvOXr0KHfccQdRUVFERUWxatWqQj9Pt27daNWqFREREXzzzTcAnD17lj59+hAVFUV4eDjTp08H4LnnnqNly5ZE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\n",
      "text/plain": [
       "<Figure size 432x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import scikitplot as skplt\n",
    " \n",
    "#%%cmd\n",
    "#pip install scikit-plot\n",
    " \n",
    "vali_proba_df = pd.DataFrame(lr.predict_proba(vali_X))\n",
    "skplt.metrics.plot_roc(vali_y, vali_proba_df,\n",
    "                        plot_micro=False,figsize=(6,6),\n",
    "                        plot_macro=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "ename": "NameError",
     "evalue": "name 'np' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mNameError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[1;32m<ipython-input-1-1f71125c6289>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mB\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;36m20\u001b[0m\u001b[1;33m/\u001b[0m\u001b[0mnp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mlog\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m2\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m      2\u001b[0m \u001b[0mA\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;36m600\u001b[0m \u001b[1;33m+\u001b[0m \u001b[0mB\u001b[0m\u001b[1;33m*\u001b[0m\u001b[0mnp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mlog\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m/\u001b[0m\u001b[1;36m60\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m      3\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m      4\u001b[0m \u001b[0mB\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0mA\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;31mNameError\u001b[0m: name 'np' is not defined"
     ]
    }
   ],
   "source": [
    "B = 20/np.log(2)\n",
    "A = 600 + B*np.log(1/60)\n",
    " \n",
    "B,A"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 100,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([481.89338686])"
      ]
     },
     "execution_count": 100,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "base_score = A - B*lr.intercept_#lr.intercept_：截距\n",
    "base_score#array([481.56390143])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 101,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "cut\n",
       "(-inf, 36.0]   -0.521786\n",
       "(36.0, 54.0]   -0.279461\n",
       "(54.0, 61.0]    0.247197\n",
       "(61.0, 64.0]    0.779983\n",
       "(64.0, 74.0]    1.155256\n",
       "(74.0, inf]     1.717923\n",
       "dtype: float64"
      ]
     },
     "execution_count": 101,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "woeall[\"age\"]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 102,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "cut\n",
       "(-inf, 36.0]   -11.310706\n",
       "(36.0, 54.0]    -6.057839\n",
       "(54.0, 61.0]     5.358475\n",
       "(61.0, 64.0]    16.907608\n",
       "(64.0, 74.0]    25.042382\n",
       "(74.0, inf]     37.239259\n",
       "dtype: float64"
      ]
     },
     "execution_count": 102,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "score_age = woeall[\"age\"] * (-B*lr.coef_[0][1])#lr.coef_：每一个特征建模之后得出的系数\n",
    "score_age#\"age\"特征中每个箱对应的分数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 103,
   "metadata": {},
   "outputs": [],
   "source": [
    "file = \"ScoreData.csv\"\n",
    "\n",
    "#open是用来打开文件的python命令，第一个参数是文件的路径+文件名，如果你的文件是放在根目录下，则你只需要文件名就好\n",
    "#第二个参数是打开文件后的用途，\"w\"表示用于写入，通常使用的是\"r\"，表示打开来阅读\n",
    "#首先写入基准分数\n",
    "#之后使用循环，每次生成一组score_age类似的分档和分数，不断写入文件之中\n",
    " \n",
    "with open(file,\"w\") as fdata:\n",
    "    fdata.write(\"base_score,{}\\n\".format(base_score))\n",
    "for i,col in enumerate(X.columns):#[*enumerate(X.columns)]\n",
    "    score = woeall[col] * (-B*lr.coef_[0][i])\n",
    "    score.name = \"Score\"\n",
    "    score.index.name = col\n",
    "    score.to_csv(file,header=True,mode=\"a\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.6"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {
    "height": "calc(100% - 180px)",
    "left": "10px",
    "top": "150px",
    "width": "280.625px"
   },
   "toc_section_display": true,
   "toc_window_display": true
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
